How to start PostgreSQL server on Mac OS X?
最后更新:
我忘了执行江户十一号命令。
最后更新>
通过运行此命令
1 | ps auxwww | grep postgres |
我看到Postgres不在运行
1 2 | > ps auxwww | grep postgres remcat 1789 0.0 0.0 2434892 480 s000 R+ 11:28PM 0:00.00 grep postgres |
这就提出了一个问题:如何启动PostgreSQL服务器?
更新:
1 2 3 | >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:
触摸没有成功,所以我改为这样做:
1 2 3 4 | > mkdir /usr/LOCAL/var/postgres > vi /usr/LOCAL/var/postgres/server.log > ls /usr/LOCAL/var/postgres/ server.log |
但是,当我尝试启动Rails服务器时,我仍然看到:
1 2 | IS the server running ON host"localhost" AND accepting TCP/IP connections ON port 5432? |
更新3:
1 2 | > pg_ctl -D /usr/LOCAL/var/postgres STATUS pg_ctl: no server running |
更新4:
我发现没有pg_hba.conf(只有pg_hba.conf.sample),所以我修改了样本并将其重命名(以删除.sample)。内容如下:
1 2 3 4 | # IPv4 LOCAL connections: host ALL ALL 127.0.0.1/32 trust # IPv6 LOCAL connections: host ALL ALL ::1/128 trust |
但我不明白:
1 2 3 4 | > 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 |
也:
1 2 3 | sudo find / -name postgresql.conf find: /dev/fd/3: NOT a directory find: /dev/fd/4: NOT a directory |
更新5:
1 2 3 4 | 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, e.g.,"su") AS the (unprivileged) USER that will own the server process. |
更新6:
这似乎很奇怪:
1 2 | > egrep 'listen|port' /usr/LOCAL/var/postgres/postgresql.conf egrep: /usr/LOCAL/var/postgres/postgresql.conf: No such file OR directory |
尽管如此,我还是做到了:
1 2 3 4 5 | >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 |
所以我这样做了:
1 2 3 4 5 | 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 |
所以我试了一下:
1 2 | > 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 |
仍然得到相同的"服务器在运行吗?"消息。
自制包管理器包括自动启动的launchctl plist。有关更多信息,请运行
手动启动:
手动停止:
自动启动:
"要启动,请立即启动PostgreSQL,然后在登录时重新启动:"
server.log中有错误消息吗?
确保在pg_hba.conf中启用了tcp localhost连接:
1 2 | # IPv4 LOCAL connections: host ALL ALL 127.0.0.1/32 trust |
检查postgresql.conf中的侦听地址和端口:
1 2 | #listen_addresses = 'localhost' # what IP address(es) TO listen ON; #port = 5432 # (CHANGE requires restart) |
清理
Postgres很可能是通过自制、Fink、MacPorts或EnterpriseDB安装程序安装的。
检查以下命令的输出,以确定安装了哪个包管理器:
1 2 3 | brew && brew list|grep postgres fink && fink list|grep postgres port && port installed|grep postgres |
如果要手动启动和停止PostgreSQL(通过自制安装),最简单的方法是:
1 | brew services START postgresql |
和
1 | brew services stop postgresql |
我有几乎完全相同的问题,您引用initdb命令作为修复方法。这也是我的解决方案,但我没有看到有人把它贴在这里,所以对于那些正在寻找它的人:
1 | initdb /usr/LOCAL/var/postgres -E utf8 |
另一种方法是使用午餐gem(launchctl的包装器):
1 2 3 | brew install postgresql initdb /usr/LOCAL/var/postgres -E utf8 gem install lunchy |
启动Postgres:
1 | lunchy START postgres |
停止Postgres:
1 | lunchy stop postgres |
有关更多信息,请参阅:"How to install postgresql on a mac with homebrew and broundy"
如果您的计算机突然重新启动
首先,您必须删除文件
您可以通过查看Postgres的日志来验证这一点,以查看可能发生的情况:
这里我的2分:我为postgres pg-ctl做了一个别名,并把它放在.bash-profile中(我的postgresql版本是9.2.4,数据库路径是/library/postgresql/9.2/data)。
1 | alias postgres.server="sudo -u postgres pg_ctl -D /Library/PostgreSQL/9.2/data" |
启动新终端。
然后?您可以使用以下命令启动/停止PostgreSQL服务器:
1 2 | postgres.server START postgres.server stop |
如果您通过
1 2 | launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist launchctl LOAD ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist |
第一行将停止Postgres,第二行将启动它。无需指定任何数据目录等,因为所有内容都在该文件中。
启动PostgreSQL服务器:
1 | pg_ctl -D /usr/LOCAL/var/postgres -l /usr/LOCAL/var/postgres/server.log START |
要结束PostgreSQL服务器:
1 | pg_ctl -D /usr/LOCAL/var/postgres stop -s -m fast |
您还可以通过cli创建别名,以简化以下操作:
1 2 | 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' |
有了这些,你只需输入"pg start"来启动postgres,输入"pg stop"来关闭它。
出于测试目的,我认为PostgreSQL应用程序是最好的选择!
运行应用程序,服务器已启动并运行。关闭应用程序,服务器就会停机。
网址:http://postgresapp.com/
使用自制安装PostgreSQL时:
1 | brew install postgres |
在输出结束时,您将看到启动服务器的方法:
1 2 3 4 5 6 | 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 |
我认为这是最好的方法。
为了方便起见,可以在.profile中添加别名。
对于快速一次性测试数据库,可以在前台运行服务器。
在新目录中初始化新的Postgres数据库
1 2 3 | mkdir db initdb db -E utf8 createdb public |
在前台启动服务器(ctrl-c停止服务器)
1 | postgres -d db |
在另一个shell会话中,连接到服务器
1 | psql -d public |
我有同样的问题,从第一篇文章开始执行所有更新。但检查日志文件后:
1 | /usr/LOCAL/var/postgres/server.log |
我看到了真正的原因:
1 2 | FATAL: DATA directory"/usr/local/var/postgres" has GROUP OR world access DETAIL: Permissions should be u=rwx (0700). |
更改此目录的权限后
1 | chmod 0700 /usr/LOCAL/var/postgres |
Postgres服务器已启动。
每次检查日志文件。
出于开发目的,最简单的方法之一是从官方网站安装postgres.app。它可以从应用程序文件夹启动/停止,也可以在终端中使用以下命令:
1 2 3 4 5 6 | # START OPEN -a Postgres # stop killall Postgres killall postgres |
PostgreSQL集成在server.app中,可通过Mountain Lion的app store获得。这意味着它已经配置好了,您只需要启动它,然后创建用户和数据库。
提示:不要从定义$pgdata等开始,按原样选取文件位置。
您将拥有此文件:/库/server/postgresql/config/org.postgresql.postgres.plist
开始:
1 | 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-u prefix=%t-c log-lock-waities=on-c log-out-ddl-c logging-collector=on-c unix-socket-directory=/private/var/pgsql_socket-c unix_socket_group=_postgres-c unix_socket_permissions=0770
你可以SUDO:
1 | sudo -u _postgres psql template1 |
或连接:
1 | psql -h localhost -U _postgres postgres |
您可以通过以下方式找到数据目录、版本、运行状态等
1 | sudo serveradmin fullstatus postgres |
此答案的变体:https://stackoverflow.com/a/13103603/2394728
1 | initdb `brew --prefix`/var/postgres/DATA -E utf8` |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | # remove OLD DATABASE files (IF there was any) $rm -rf /usr/LOCAL/var/postgres # install the BINARY $ brew install postgresql # init it $ initdb /usr/LOCAL/var/postgres # START the postgres server $ postgres -D /usr/LOCAL/var/postgres # CREATE your DATABASE $ createdb mydb # Access db. $ psql mydb psql (9.0.1) TYPE"help" FOR help. |
尽管收到了相同的错误消息,但上面的所有答案都没有为我解决问题。我可以通过删除现有postmaster.pid文件来备份和运行我的实例,该文件已被锁定,不允许连接。
对于MacPorts,只需使用加载/卸载命令和正在运行的服务器的端口名:
1 2 3 | sudo port LOAD postgresql96-server - OR - sudo port unload postgresql96-server |
所以你不必记住
1 | docker run --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword -d postgres |
https://hub.docker.com//postgres
对于mac/osx,我非常喜欢launchrocket用于开发中使用的这个和其他后台服务。
https://github.com/jimbojsb/launchrocket
这个站点有很好的安装说明:http://macappstore.org/launchrocket/
这在系统首选项中为您提供了一个很好的屏幕,允许您在登录时启动、重新启动、根目录和启动。
为我修的。
当然,这将升级您的Postgres版本并更新/安装任何依赖项。警告:要知道您的PostgreSQL版本可能会更改,请执行此操作。对我来说,这没什么大不了的。