【问题标题】:How can I start PostgreSQL server on Mac OS X?如何在 Mac OS X 上启动 PostgreSQL 服务器?
【发布时间】:2011-12-20 00:09:03
【问题描述】:

最终更新:

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

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

【问题讨论】:

  • 你是如何安装 Postgres 的?你是使用包管理器还是手动安装?
  • 记不清了,但它要么已经安装,要么我运行了“brew install postgres”。我倾向于后者,但我不能 100% 确定。
  • 使用sudo,即sudo pg_ctl...
  • 我投了赞成票只是因为最终更新让我笑得很厉害! :D
  • 不得不投票,我每周至少来这里 3 次,复制第一个 pg_ctl 命令以在意外终止后重新启动 psql.. 呵呵,我要学习它:D 谢谢老兄!

标签: macos postgresql homebrew


【解决方案1】:

这是我的两分钱:我为postgres pg_ctl做了一个别名,并将它放在文件.bash_profile中(我的PostgreSQL版本是9.2.4,数据库路径是/Library/PostgreSQL/9.2/data)。

alias postgres.server="sudo -u postgres pg_ctl -D /Library/PostgreSQL/9.2/data"

启动一个新终端。

然后呢?您可以使用以下命令启动/停止 PostgreSQL 服务器:

postgres.server start
postgres.server stop

【讨论】:

  • 这里用-D指定数据目录是关键
  • 我不断收到“请以拥有服务器进程的(非特权)用户身份登录(使用,例如,“su”)。只运行 sudo 时。 +1
  • 谢谢。 postgres 工具使用 su 的建议惨遭失败。 sudo -u 工作出色。 (在 El Capitan 上)
【解决方案2】:

出于测试目的,我认为 PostgreSQL App 是最好的选择!

运行应用程序,服务器已启动并运行。

关闭应用,服务器宕机。

http://postgresapp.com/

【讨论】:

    【解决方案3】:

    Homebrew 包管理器包含自动启动的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 连接:

    # 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)
    

    清理

    PostgreSQL 很可能是通过HomebrewFinkMacPortsEnterpriseDB 安装程序安装的。

    检查以下命令的输出以确定它与哪个包管理器一起安装:

    brew && brew list|grep postgres
    fink && fink list|grep postgres
    port && port installed|grep postgres
    

    【讨论】:

    • @Ramy 触摸成功了吗?检查 /usr/local/var/postgresserver.log 的存在和权限。您的用户 ID 应该是 rw。
    • @Ramy:你能在 /usr/local/var/postgres/server.log 中包含任何信息吗?您的安装可能已损坏,使用 Homebrew 等已知来源进行清理和重新安装可能会更快。
    • 为什么这一切都是必要的?为什么不能像启动 node 一样启动 postgres?
    • 启动和停止程序是多么复杂的命令
    • 这仍然有效,但有点过时了。 brew services start postgresql 下方的答案是一个更新且直接的答案。
    【解决方案4】:

    这个答案的变化:https://stackoverflow.com/a/13103603/2394728

    initdb `brew --prefix`/var/postgres/data -E utf8`` &&  pg_ctl -D /usr/local/var/postgres/data -l logfile start
    

    【讨论】:

    • 你应该添加一个链接到你引用的答案。
    • 这很有帮助,因为我的 pg 工作正常,但突然停止工作并且找不到 /var/postgres 文件夹。
    • 有人可以评论一下为什么这优于链接的答案吗?正如我所看到的,我上次遇到类似问题时已经投票了,我将使用它,因为这里没有给出任何理由。
    【解决方案5】:
    docker run --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword -d postgres
    

    https://hub.docker.com/_/postgres

    【讨论】:

      【解决方案6】:

      我遇到了几乎完全相同的问题,您引用 initdb 命令作为解决方法。这也是我的解决方案,但我没有看到有人在这里发布它,所以对于那些正在寻找它的人:

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

      【讨论】:

      • 这也对我有用,initdb 告诉我我已经完成了配置,所以我删除了整个目录:“rm -rf /usr/local/var/postgres”再次运行你的命令并我的服务器现在启动并运行,非常感谢先生!
      • 是的,我必须运行 rm -rf /usr/local/var/postgres 然后这对我有用
      • 这对我也有用。在 initdb 之前,我还必须 chown postgres 目录 (chown _your username on your comp_ usr/local/var/postgres),然后是 initdb。之后,服务器会在您重新启动时自动启动(如果您按照 Homebrew 的说明进行操作)或手动启动 pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start
      • initdb 之后(包括必要时删除旧目录),brew services start postgresql 有效
      • 如果rm -rfing 数据库中当前所有内容的想法让您有点害怕,您可以使用mv /usr/local/var/postgres /usr/local/var/postgres.backup 之类的东西将其移动到新的备份目录,而不是完全删除它,然后运行命令重新启动数据库。
      猜你喜欢
      • 2013-08-01
      • 1970-01-01
      • 2014-12-15
      • 2011-12-19
      • 1970-01-01
      • 1970-01-01
      • 2012-06-25
      • 1970-01-01
      相关资源
      最近更新 更多