如何在Mac OS X上启动PostgreSQL服务器?

1172

最终更新:

我忘记执行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:

触摸(touch)没有成功,因此我做了这个替代方案:

> mkdir /usr/local/var/postgres
> vi /usr/local/var/postgres/server.log
> ls /usr/local/var/postgres/
server.log

但是,当我尝试启动Ruby on Rails服务器时,我仍然看到这个消息:

服务器是否在主机“localhost”上运行,并接受端口5432上的TCP/IP连接?

更新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, e.g., "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

我仍然收到相同的“服务器是否正在运行?”消息。


1
我记不清了,但可能是已经安装好了,或者我运行了“brew install postgres”。我倾向于后者,但我不能百分之百确定。 - Ramy
我曾经遇到过同样的问题。如果你的PostgreSQL服务器正在运行(可以使用ps aux | grep postgres命令进行检查),但是psql仍然显示服务器未运行:通过复制postgresql.conf.sample文件创建一个postgresql.conf文件可以解决该问题。 - viper
64
我点赞这个帖子只是因为最后的更新让我非常开心,哈哈! :D - pkoch
20
必须点赞,我每周至少来这里3次,复制第一个pg_ctl命令以在意外终止后重新启动psql。嘿,我得学习它:D感谢你! - lucygenik
1
如果你和我一样,认为需要“启动数据库”,而实际上你只是想要开始使用数据库,那么请启动“pgAdmin”。这就相当于我们微软背景的人所使用的SQL Server Management Studio。 - P.Brian.Mackey
显示剩余7条评论
38个回答

5
  • 使用brew安装postgresql:brew install postgresql,你可以使用“@”符号指定版本:brew install postgresql@14
  • 启动postgresql:brew services start postgresql或特定版本brew services start postgresql@14
  • 停止postgresql:brew services stop postgresql

4

Homebrew 是条捷径!!

启动服务的方式:

brew services start postgresql

列出它:
brew services list | grep postgres

停止服务:
brew services stop postgresql

3
如果您使用EnterpriseDB安装程序安装了PostgreSQL,则可以按照Kenial建议的方法进行操作:
sudo -u postgres pg_ctl -D /Library/PostgreSQL/{version}/data start
sudo -u postgres pg_ctl -D /Library/PostgreSQL/{version}/data stop

2
对于 MacPorts,只需使用加载/卸载命令和正在运行的服务器的端口名称:
sudo port load postgresql96-server
- or -
sudo port unload postgresql96-server

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

2

如果你使用homebrew安装了Postgres,那么以下是启动Postgres并使其保持在前台以查看日志的步骤:

/opt/homebrew/opt/postgresql/bin/postgres -D /opt/homebrew/var/postgres

2
如果你没有使用Homebrew安装Postgres服务器或者使用.dmg文件进行安装,可以尝试以下步骤:
$ sudo su postgres
bash-3.2$ /Library/PostgreSQL/13/bin/pg_ctl -D /Library/PostgreSQL/13/data/ stop

1

$ brew upgrade postgres

这个命令会升级你的PostgreSQL版本并更新/安装任何依赖项。

对我来说,它解决了问题。

警告:执行此操作时,请注意你的PostgreSQL版本可能会发生变化。但对我而言,这不是什么大问题。


1

尽管收到相同的错误消息,之前的回答都没有解决我的问题。

通过删除已锁定且不允许连接的现有 postmaster.pid 文件,我成功使我的实例重新启动并运行。


1

这个方法每次都对我有效,受到了Craig Ringer的启发:

brew install proctools
sudo pkill -u postgres

proctools 包含 pkill。如果你没有 Homebrew:https://brew.sh/


1

在执行brew services restart postgresql之后。

最好的方法是: brew services stop postgresql brew postgresql-upgrade-database brew services start postgresql

然后输入:psql

现在运行的是在出现错误后: psql: error: could not connect to server: No such file or directory Is the server running locally and accepting connections on Unix domain socket "/tmp/.s.PGSQL.5432"?

升级可能是可选的,具体取决于其他依赖项。

这意味着,与其使用brew在mac os上重新启动,不如完全停止postgres,然后启动postgres并连接到您的psql数据库名称。

希望这有用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接