关于MacOS:如何在Mac OS X上启动PostgreSQL服务器?

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。有关更多信息,请运行brew info postgres

手动启动:

pg_ctl -D /usr/local/var/postgres start

手动停止:

pg_ctl -D /usr/local/var/postgres stop

自动启动:

"要启动,请立即启动PostgreSQL,然后在登录时重新启动:"

brew services start postgresql

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连接:

1
2
# IPv4 LOCAL connections:
host    ALL             ALL             127.0.0.1/32            trust

检查postgresql.conf中的侦听地址和端口:

egrep 'listen|port' /usr/local/var/postgres/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"


如果您的计算机突然重新启动

首先,您必须删除文件/usr/local/var/postgres/postmaster.pid,然后根据您的安装,您可以使用其他许多方法中的一种重新启动服务。

您可以通过查看Postgres的日志来验证这一点,以查看可能发生的情况:tail -f /usr/local/var/postgres/server.log


这里我的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


如果您通过brew安装了Postgres,那么最干净的方法就是卸载和/或加载安装附带的启动配置文件:

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

所以你不必记住/Library/LaunchDaemons/org.macports.postgresql96.plist文件的位置


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/

这在系统首选项中为您提供了一个很好的屏幕,允许您在登录时启动、重新启动、根目录和启动。


$ brew upgrade postgres

为我修的。

当然,这将升级您的Postgres版本并更新/安装任何依赖项。警告:要知道您的PostgreSQL版本可能会更改,请执行此操作。对我来说,这没什么大不了的。