如何使用MacPorts在OSX Yosemite上安装PostgreSQL

时间:2015-02-09 08:27:48

标签: postgresql osx-yosemite macports

我想为PostgreSQL中正在开发的节点项目安装OSX Yosemite。我使用MacPorts,因此尝试了此处描述的方法:https://github.com/codeforamerica/ohana-api/wiki/Installing-PostgreSQL-with-MacPorts-on-OS-X

...但我在第2步中遇到错误:

$ sudo gem install pg -- --with-pg-config=/opt/local/lib/postgresql93/bin/pg_config > ruby_error
ERROR:  Error installing pg:
    ERROR: Failed to build gem native extension.

    /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/ruby extconf.rb --with-pg-config=/opt/local/lib/postgresql93/bin/pg_config
Using config values from /opt/local/lib/postgresql93/bin/pg_config
checking for libpq-fe.h... yes
checking for libpq/libpq-fs.h... yes
checking for pg_config_manual.h... yes
checking for PQconnectdb() in -lpq... no
checking for PQconnectdb() in -llibpq... no
checking for PQconnectdb() in -lms/libpq... no
Can't find the PostgreSQL client library (libpq)
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers.  Check the mkmf.log file for more details.  You may
need configuration options.

...认为我可能不需要安装pg gem,因为我想使用Node而不是Ruby,我接下来的步骤。但是在第3.3步中我遇到了一个错误:

$ sudo su postgres -c '/opt/local/lib/postgresql93/bin/initdb -D /opt/local/var/db/postgresql93/defaultdb'
shell-init: error retrieving current directory: getcwd: cannot access parent directories: Permission denied
could not identify current directory: Permission denied
could not identify current directory: Permission denied
could not identify current directory: Permission denied
The program "postgres" is needed by initdb but was not found in the
same directory as "initdb".
Check your installation.

...检查我的/ opt / local / lib / postgresql93 / bin /目录,我看到initdbpostgres。我看到那些说Permission denied的行,我想知道那是什么。

不确定如何进步。考虑使用Postgres.app,如果真的更容易,但不确定使用MacPorts安装是否会更好,因为我使用MacPorts安装了大多数其他东西。关于我的任何问题的提示表示赞赏!

2 个答案:

答案 0 :(得分:14)

/defaultdb之间目录的权限/所有权可能需要修复。我认为PostgreSQL可能对这些的所有权很敏感,尽管看起来在你的情况下PostgreSQL根本无法访问这些。这就是我对每个目录的拥有。

$ ls -hlt /opt/local/var/db/
total 0
drwxr-xr-x  7 root  admin   238B Jan 23 16:54 texmf
drwxr-xr-x  3 root  admin   102B Dec 25 07:37 postgresql94

您可以根据需要执行sudo chmod a+rx /opt/local/var/db/来修复权限。

对于defaultdb目录本身,您应该按照链接的说明进行操作,这些说明似乎和我一样:

sudo chown postgres:postgres /opt/local/var/db/postgresql93/defaultdb

以下是改编自我blog的说明(虽然我建议使用PostgreSQL 9.4,我现在这样做)。我从9.1开始使用MacPorts运行PostgreSQL而没有出现重大问题。

1。使用MacPorts安装PostgreSQL。

当然,我假设你已经在你的系统上启动并运行了MacPorts。

sudo port install postgresql93 +perl +python27
sudo port install postgresql93-server

2。设置PostgreSQL

我首先需要初始化数据库集群,然后让服务器运行。以下内容直接来自MacPorts端口postgresql93-server附带的屏幕说明。

sudo mkdir -p /opt/local/var/db/postgresql93/defaultdb
sudo chown postgres:postgres /opt/local/var/db/postgresql93/defaultdb
sudo su postgres -c '/opt/local/lib/postgresql93/bin/initdb -D /opt/local/var/db/postgresql93/defaultdb'

请注意,MacPorts会创建一个启动守护程序。要立即加载它并确保它在系统启动时启动,请执行:

sudo defaults write /Library/LaunchDaemons/org.macports.postgresql93-server.plist Disabled -bool false
sudo launchctl load /Library/LaunchDaemons/org.macports.postgresql93-server.plist

然后我使用psql进行某些设置以获取我的数据库。

sudo su - postgres
/opt/local/lib/postgresql93/bin/psql -U postgres -d template1

如果你到达这里,那么你的系统上就会运行PostgreSQL。

答案 1 :(得分:6)

尝试运行initdb时遇到了同样的问题,即使按照Ian Gow的说明进行操作:

$ sudo su postgres -c '/opt/local/lib/postgresql94/bin/initdb -D /opt/local/var/db/postgresql94/defaultdb'
shell-init: error retrieving current directory: getcwd: cannot access parent directories: Permission denied
could not identify current directory: Permission denied
could not identify current directory: Permission denied
could not identify current directory: Permission denied
The program "postgres" is needed by initdb but was not found in the
same directory as "initdb".
Check your installation.

如果你试图让它从你自己的主目录中运行一个命令,那么用户postgres就无法做任何事情,因为在那里postgres不允许读取它自己的位置,因此不能弄清楚任何其他路径。因此,简单的解决方案是在任何必须以cd /postgresinitdb等等运行的命令之前运行pg_ctl。之后,您可以使用cd -快速跳回上一个工作目录。