我想为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 /目录,我看到initdb
和postgres
。我看到那些说Permission denied
的行,我想知道那是什么。
不确定如何进步。考虑使用Postgres.app,如果真的更容易,但不确定使用MacPorts安装是否会更好,因为我使用MacPorts安装了大多数其他东西。关于我的任何问题的提示表示赞赏!
答案 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而没有出现重大问题。
当然,我假设你已经在你的系统上启动并运行了MacPorts。
sudo port install postgresql93 +perl +python27
sudo port install postgresql93-server
我首先需要初始化数据库集群,然后让服务器运行。以下内容直接来自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 /
(postgres
,initdb
等等运行的命令之前运行pg_ctl
。之后,您可以使用cd -
快速跳回上一个工作目录。