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

How to install PostgreSQL on OSX Yosemite using MacPorts

我想为我在 OSX Yosemite 中开发的节点项目安装 PostgreSQL。我使用 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 安装大多数其他东西。感谢有关我的任何问题的提示!

/defaultdb 之间的目录中的 permissions/ownership 可能需要修复。我认为 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 目录本身,您应该按照您 link 的说明进行操作,这些说明似乎与我的相同:

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 进行一些设置以使 my 数据库运行。

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

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

我在尝试 运行 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 / 作为 postgresinitdbpg_ctl 等)。之后,您可以使用 cd -.

快速跳回到之前的工作目录