如何在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个回答

0

在执行命令的用户不是Postgres用户时,大多数人会遇到权限被拒绝的问题。

> ./pg_ctl -D /Library/PostgreSQL/<version>/data start 
  pg_ctl: could not open PID file "/Library/PostgreSQL/<version>/data/postmaster.pid": Permission denied 

您需要切换到Postgres用户,然后执行该命令。

sudo -u postgres ./pg_ctl start -D /Library/PostgreSQL/<version>/data/ 
sudo -u postgres ./pg_ctl stop -D /Library/PostgreSQL/<version>/data/
sudo -u postgres ./pg_ctl reload -D /Library/PostgreSQL/<version>/data/ 

0

我曾经遇到过同样的问题。我尝试了所有这些解决方案,但都没有起作用。

最终,我通过将Django设置中的PostgreSQL HOSTlocalhost更改为127.0.0.1来使其正常工作。


0

0

有一些边缘情况可能会对某些人有帮助:

有一个选项,你可能会在postgres.pid中找到一些PID。如果你重新启动机器,并且在PostgreSQL再次启动之前,某个其他进程将获取该PID。

如果发生这种情况,则无论是pg_ctl状态还是brew服务被询问有关PostgreSQL状态的信息,都会告诉你它处于up状态。

只需执行ps aux | grep <yourPID>并检查它是否真的是PostgreSQL。


0

对于 Mac OS X,我非常喜欢 LaunchRocket 以及其他在开发中使用的后台服务。

这个网站有很好的 安装说明

这将为您提供一个漂亮的屏幕,让您可以在系统偏好设置中启动、重启、root和登录时启动。


0
PostgreSQL 有两个主要组成部分:数据库服务器和客户端。
CLI 中包含了一个客户端,或者像我一样,你可能习惯于使用 phpMyAdmin 这样的工具,因此需要一个单独的 GUI 客户端。
例如,在 macOS 上:从 https://postgresapp.com/ 下载大小约为 65 MB 的 Postgres.app 进行安装。
然后按照 这些说明 进行操作:
  • 点击右侧按钮安装和初始化服务器。
  • 使用终端更新您的$PATHsudo mkdir -p /etc/paths.d && echo /Applications/Postgres.app/Contents/Versions/latest/bin | sudo tee /etc/paths.d/postgresapp
  • 最后,从https://www.pgadmin.org/download/pgadmin-4-macos/下载约100 MB的pgAdmin GUI进行安装。

0

-1

这里有一个简单且经常使用的解决方案(适用于Mac OS):

(警告:它将删除您所有的数据库)

  1. 停止postgres服务:

    brew services stop postgres

  2. 删除“postgres”目录中的所有文件:

    rm -rf /usr/local/var/postgres/*

  3. 初始化新的数据库系统:

    initdb /usr/local/var/postgres -E utf8

  4. 启动postgres:

    pg_ctl -D /usr/local/var/postgres -l server.log start


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