如何在Mac OS X上启动PostgreSQL服务器?
最终更新:
我忘了运行initdb命令。
</最终更新>
通过运行这个命令
ps auxwww | grep postgres
我看到postgres没有运行
> ps auxwww | grep postgres remcat 1789 0.0 0.0 2434892 480 s000 R+ 11:28PM 0:00.00 grep postgres
这引发了一个问题:我如何启动postgresql服务器?
更新:
>pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start server starting sh: /usr/local/var/postgres/server.log: No such file or directory
更新2:
触摸不成功,所以我做了这个,而不是:
> mkdir /usr/local/var/postgres > vi /usr/local/var/postgres/server.log > ls /usr/local/var/postgres/ server.log
但是当我尝试启动rails服务器时,我仍然看到:
Is the server running on host "localhost" and accepting TCP/IP connections on port 5432?
更新3:
> pg_ctl -D /usr/local/var/postgres status pg_ctl: no server running
更新4:
我发现那里没有pg_hba.conf(只有pg_hba.conf.sample),所以我修改了样本并重新命名了它(去除.sample)。 这里是内容:
# IPv4 local connections: host all all 127.0.0.1/32 trust # IPv6 local connections: host all all ::1/128 trust
但我不明白这一点:
> pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start server starting > pg_ctl -D /usr/local/var/postgres status pg_ctl: no server running
也:
sudo find / -name postgresql.conf find: /dev/fd/3: Not a directory find: /dev/fd/4: Not a directory
更新5:
sudo pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start Password: pg_ctl: cannot be run as root Please log in (using, eg, "su") as the (unprivileged) user that will own the server process.
更新6:
这似乎很奇怪:
> egrep 'listen|port' /usr/local/var/postgres/postgresql.conf egrep: /usr/local/var/postgres/postgresql.conf: No such file or directory
不过,我确实这样做了:
>sudo find / -name "*postgresql.conf*" find: /dev/fd/3: Not a directory find: /dev/fd/4: Not a directory /usr/local/Cellar/postgresql/9.0.4/share/postgresql/postgresql.conf.sample /usr/share/postgresql/postgresql.conf.sample
所以我这样做了:
egrep 'listen|port' /usr/local/Cellar/postgresql/9.0.4/share/postgresql/postgresql.conf.sample #listen_addresses = 'localhost' # what IP address(es) to listen on; #port = 5432 # (change requires restart) # supported by the operating system: # %r = remote host and port
所以我试过这个:
> cp /usr/local/Cellar/postgresql/9.0.4/share/postgresql/postgresql.conf.sample /usr/local/Cellar/postgresql/9.0.4/share/postgresql/postgresql.conf > cp /usr/share/postgresql/postgresql.conf.sample /usr/share/postgresql/postgresql.conf
仍然相同“服务器是否在运行? 信息。
Homebrew软件包pipe理器包括launchctl plists自动启动。 有关更多信息,请运行brew info postgres
。
手动启动:
pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start
手动停止:
pg_ctl -D /usr/local/var/postgres stop -s -m fast
pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start
什么?
pg_ctl -D /usr/local/var/postgres status
什么?
server.log中是否有错误信息?
确保在pg_hba.conf中启用了tcp localhost连接:
# IPv4 local connections: host all all 127.0.0.1/32 trust
检查postgresql.conf中的listen_addresses和端口:
egrep 'listen|port' /usr/local/var/postgres/postgresql.conf
#listen_addresses = 'localhost' # what IP address(es) to listen on; #port = 5432 # (change requires restart)
打扫干净
Postgres很可能是通过Homebrew , Fink , MacPorts或EnterpriseDB安装程序安装的。
检查以下命令的输出以确定安装了哪个软件包pipe理器:
brew && brew list|grep postgres fink && fink list|grep postgres port && port installed|grep postgres
如果你想手动启动和停止postgresql(通过自制软件安装),最简单的方法是:
brew services start postgresql
和
brew services stop postgresql
我有几乎完全相同的问题,你引用initdb命令作为修复。 这也是我的解决scheme,但是我没有看到有人在这里发布,所以对于那些正在寻找它的人:
initdb /usr/local/var/postgres -E utf8
另一种方法是使用午餐gem。
gem install lunchy
要开始postgres:
lunchy start postgres
要停止postgres:
lunchy stop postgres
有关更多信息,请参阅:“ 如何在Mac上使用自制软件和午餐安装PostgreSQL ”
在这里,我的2美分:我做了postgres pg_ctl的别名,并把它放在.bash_profile(我的postgresql版本是9.2.4,数据库path是/Library/PostgreSQL/9.2/data)。
alias postgres.server="sudo -u postgres pg_ctl -D /Library/PostgreSQL/9.2/data"
启动新的terminal。
接着? 你可以用这个开始/停止你的postgresql服务器:
postgres.server start postgres.server stop
如果您的电脑突然重新启动
首先,您必须删除文件/usr/local/var/postgres/postmaster.pid
然后,您可以使用其他提到的方法之一重新启动服务,具体取决于您的安装。
您可以通过查看Postgres的日志来查看可能发生的事情: tail -f /usr/local/var/postgres/server.log
到目前为止 ,如果您已经通过brew
安装了它,启动/停止/重新启动postgres最简单的方法是简单地卸载和/或加载安装随附的launchdconfiguration文件:
launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
第一行将停止postgres,第二行将启动它。 没有必要指定任何数据目录等,因为一切都在该文件。
要启动postgresql服务器:
pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start
结束postgresql服务器:
pg_ctl -D /usr/local/var/postgres stop -s -m fast
您也可以通过CLI创build一个别名来简化操作:
alias pg-start='pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start' alias pg-stop='pg_ctl -D /usr/local/var/postgres stop -s -m fast'
有了这些,你可以input“pg-start”来启动Postgres和“pg-stop”来closures它。
出于testing目的,我认为PostgreSQL应用程序是最好的select!
运行一个应用程序,服务器启动并运行。 closures应用程序,服务器closures。
当你使用自制软件安装postgresql时:
brew install postgres
在输出结尾你会看到这个方法启动服务器:
To have launchd start postgresql at login: ln -sfv /usr/local/opt/postgresql/*.plist ~/Library/LaunchAgents Then to load postgresql now: launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist Or, if you don't want/need launchctl, you can just run: postgres -D /usr/local/var/postgres
我认为这是最好的方法。
为方便起见,您可以将。alias添加到.profile中。
对于快速的一次性testing数据库,您可以在前台运行服务器。
在新目录中初始化一个新的postgres数据库
mkdir db initdb db -E utf8 createdb public
在前台启动服务器(ctrl-C停止服务器)
postgres -d db
在另一个shell会话中,连接到服务器
psql -d public
我有同样的问题,并执行从第一篇文章的所有更新。 但是在检查日志文件之后:
/usr/local/var/postgres/server.log
我看到真实的原因:
FATAL: data directory "/usr/local/var/postgres" has group or world access DETAIL: Permissions should be u=rwx (0700).
更改此目录的权限后
chmod 0700 /usr/local/var/postgres
postgres服务器已经启动。
每次检查日志文件。
PostgreSQL被集成在可以通过Mountain Lion的App Store获得的Server.app中。 这意味着它已经configuration好了,你只需要启动它,然后创build用户和数据库。
提示 :不要从定义$ PGDATA等等开始,按原样获取文件位置。
你会有这个文件: /Library/Server/PostgreSQL/Config/org.postgresql.postgres.plist
开始:
sudo serveradmin start postgres
进程以参数开始:
/Applications/Server.app/Contents/ServerRoot/usr/bin/postgres_real -D / Library / Server / PostgreSQL / Data -c listen_addresses = 127.0.0.1,:: 1 -c log_connections = on -c log_directory = / Library / Logs / PostgreSQL -c log_filename = PostgreSQL.log -c log_line_prefix =%t -c log_lock_waits = on -c log_statement = ddl -c logging_collector = on -c unix_socket_directory = / private / var / pgsql_socket -c unix_socket_group = _postgres -c unix_socket_permissions = 0770
你可以sudo:
sudo -u _postgres psql template1
或连接:
psql -h localhost -U _postgres postgres
你可以find数据目录,版本,运行状态等等
sudo serveradmin fullstatus postgres
为了开发的目的,最简单的方法之一是从官方网站安装Postgres.app。 它可以从Applications文件夹中启动/停止或在terminal中使用以下命令:
# start open -a Postgres # stop killall Postgres killall postgres
这个答案的变化: https : //stackoverflow.com/a/13103603/2394728
initdb `brew --prefix`/var/postgres/data -E utf8`
尽pipe得到了相同的错误信息,但上述答案都没有解决我的问题。 我能够通过删除现有的postmaster.pid文件locking并且不允许连接来恢复我的实例。
对于Mac / OSX,我真的很喜欢LaunchRocket这个和我在开发中使用的其他背景服务。
https://github.com/jimbojsb/launchrocket
这个网站有很好的安装说明: http : //macappstore.org/launchrocket/
这给你一个很好的屏幕在你的系统首选项,允许您启动,重新启动,根login启动。
$ brew upgrade postgres
给我修好了
当然,这将升级你的postgres版本,并更新/安装任何依赖项。 警告:这样做知道你的postgresql版本可能会改变。 对我来说,这不是什么大不了的事情。