为什么我不能让postgresql服务器运行?

时间:2013-10-03 18:12:40

标签: ruby macos bash postgresql postgresql-9.1

确定。我一直试图解决这个问题好几天了。我安装,卸载并重新安装了Postgresql 3次。我正好遵循了这个论坛中的说明:https://dba.stackexchange.com/questions/42048/cant-connect-to-the-postgres-server-ls-tmp-s-pgsql-5432-no-such-file-or-dir

我在很多论坛中找到了这个解决方案,所以我试着运行:

$ mkdir /var/pgsql_socket/
$ sudo mkdir /var/pgsql_socket/
$ ln -s /private/tmp/.s.PGSQL.5432 /var/pgsql_socket/

但是这没用。当我尝试启动服务器时,它仍然说有另一个正在运行,然后每次我尝试创建数据库或键入“psql”时都会失败

然后,我尝试运行以下命令,以便将OS X的内置版postgres中的命令路径更改为我的版本,它似乎有效:

$ cd /usr/local/bin
$ rm postgres
$ ln -s /Library/PostgreSQL/9.2/bin/postgres postgres
$ rm psql
$ ln -s /Library/PostgreSQL/9.2/bin/psql psql
$ rm pg_ctl
$ ln -s /Library/PostgreSQL/9.2/bin/pg_ctl pg_ctl

然后我运行以下内容为postgres创建用户:

$ sudo -u postgres createuser --superuser $Sarah
$ sudo -u postgres createuser --superuser user_sarah
$ sudo -u postgres psql postgres

但它一直说“未知的用户帖子” 然后我尝试安装Ruby pg gem,但也失败了,说有必要的库存在问题。

我已经保存了我在终端尝试做的所有事情的文本文件。如果我发布,请告诉我。感谢。

更新 当我尝试运行时: $ pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start 我明白了: -bash: /usr/local/bin/pg_ctl: No such file or directory 这与我在此问题上发布的许多其他错误不同。

2 个答案:

答案 0 :(得分:1)

首先,您应该验证没有postmaster运行:ps -ef | grep postmaster。一旦你验证了postmaster没有运行,你应该查看postgresql命令initd。根据您的服务器安装,可能安装也可能不安装。您需要在尝试启动postgres之前创建数据库。听起来像你有一个没有安装主postgresql命令到/ usr / bin的安装,pg_ctl就是其中之一。

仅供参考:postgres帐户不是登录帐户,在安装postgresql时会自动创建,因此如果安装良好,它应该在那里。如果postgres不在sudoers文件中,你不能以postgres的形式sudo。

答案 1 :(得分:1)

自制的PostgreSQL安装不会创建或需要postgres帐户,因此所有提及sudo -u postgresps -fu postgres的提及都不适用于您的情况。

命令brew info postgresql输出有关启动和停止它的各种信息,您可以阅读它们。相比之下,你不想盲目相信随机用户告诉他们如何“修复”他们的非工作装置。事实上,网络上有关于MacOS X上PostgreSQL的一些令人震惊的错误建议,对我来说,你在dba.se上链接的答案就在其中。从开始到结束都是错误的,你应该注意到它不被接受作为答案。当然,作者意味着很好,但他没有看到他自己的背景不能推广到其他装置。

最糟糕的部分是建议在/usr/local/bin/中删除二进制文件postgrespsqlpg_ctl并将它们软链接到/Library/PostgreSQL/9.2/bin/内的假设等价物中。 对我来说它只是破坏了自制软件安装。 难怪在这样做之后你会收到这个错误:

  

/ usr / local / bin / pg_ctl:没有这样的文件或目录

所以我的答案是重新安装带有brew的postgresql以从干净状态重新启动,然后确保你启动的所有postgres命令都来自/usr/local/bin,并且始终首先读取传递给{{1的服务器日志文件如果你对PG相关的任何事情有任何疑问。