【问题标题】:PostgreSQL Mountain Lion socket issuePostgreSQL 山狮套接字问题
【发布时间】:2012-08-15 11:36:31
【问题描述】:

我一直在尝试在我的系统上设置 PostgreSQL(OSX 10.8,全新安装),但在使用 psqlcreatedb 等时遇到了麻烦。我尝试了各种解决方案,但都没有似乎有效。

安装成功,我继续使用以下方法修复已知的套接字问题:

mkdir /var/pgsql_socket 
sudo chown $USER /var/pgsql_socket

然后我编辑postgresql.conf,将unix_socket_directory设置为

unix_socket_directory = '/var/pgsql_socket'

并重新启动 Pg。

这显然应该解决了套接字问题,但我仍然得到:

psql: 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"?

另外,我检查了服务器的状态,它似乎正在运行,但我仍然得到“没有这样的文件或目录”

有什么想法吗?

【问题讨论】:

  • Pg 可以监听不同的端口吗?检查 postgresql.conf - port 指令。另外,您是如何安装 Pg 的? Heroku 的 Postgres.app?自制? EnterpriseDB 安装程序?还有什么?
  • 使用 Homebrew,但也安装了 Postgres.app .... 自最初安装 Homebrew 以来问题一直存在

标签: macos postgresql osx-mountain-lion


【解决方案1】:

请参阅下面的问题/链接的已接受答案。为我工作,但请注意要更改的设置是 unix_socket_directories (复数)而不是所述的 unix_socket_directory。

https://dba.stackexchange.com/questions/21587/postgresql-is-running-locally-but-i-cannot-connect-why

【讨论】:

    【解决方案2】:

    我在通过 Homebrew 安装 PostgreSQL 9.2 时遇到了同样的问题。此构建附带的psql 在没有任何选项的情况下调用时会查找/tmp 的套接字。

    我不想添加任何新的环境变量,例如 PGHOST 或为 psql 创建别名。做这些事情都没有错,但我只是不想增加我的环境的混乱。

    那么,为什么不将postgresql.conf 中的unix_socket_directory 设置为/tmp?我做到了:

    unix_socket_directory = '/tmp'      # (change requires restart)
    #unix_socket_group = ''             # (change requires restart)
    #unix_socket_permissions = 0777     # begin with 0 to use octal notation
    

    重新加载后,我可以在没有 -h 选项的情况下运行 $ psql,而无需添加别名或环境变量。

    【讨论】:

    • 我喜欢这个解决方案的想法,但它似乎对我不起作用。
    【解决方案3】:

    我遇到了同样的问题,在完成你所做的之后,我还必须更改路径,以便 /usr/local/bin(Homebrew 放置所有内容的地方)位于 /usr/bin 之前。我不知道为什么这不再是默认设置了,但是很容易更改。

    sudo vi /etc/paths
    

    然后编辑文件以使 /usr/local/bin 行位于顶部。

    或者,如果您只是希望针对您的特定用户帐户进行此更改,请编辑您的 ~/.bash_profile 文件:

    touch ~/.bash_profile
    vi ~/.bash_profile
    

    并添加这一行:export PATH="/usr/local/bin:$PATH"

    然后运行source ~/.bash_profile 以使更改生效。

    【讨论】:

      【解决方案4】:

      根据错误信息,$PATH 中最先出现的psql 命令将/tmp 作为硬编码的默认 unix 套接字目录。

      由于实际目录实际上是/var/pgsql_socket,因此您应该明确告诉它而不是依赖默认值:

      $ psql -h /var/pgsql_socket [other options]
      

      这同样适用于其他客户端命令,例如 createdbdropdbcreateuser...

      如果不想每次都指定-h,可以放入PGHOST环境变量中。

      有些人还通过使用到localhost 的 TCP 连接而不是使用 Unix 套接字目录来解决这个问题。

      此问题的根本原因是在 Mac OS X 上安装 PostgreSQL 后,系统最终拥有两个不同的 postgres 客户端集实例(libpq 库、psql 和其他相关实用程序),一个与 MacOS 捆绑在一起,另一个与 PostgreSQL 安装程序一起提供。

      因此,另一种方法是更改​​您的$PATH,以便在与系统一起安装的psql 之前选择与PostgreSQL 一起安装的/usr/bin/psql

      【讨论】:

      • 我遇到了完全相同的问题,我只使用了 Postgres.app。问题(正如丹尼尔所暗示的)是 Mountain Lion 有一个默认安装,并且确实有两个不同的 postgres 客户端实例。我通过将其放在我的 .bash_profile 中为 Postgres 应用程序的版本创建了一个别名:alias psql=/Applications/Postgres.app/Contents/MacOS/bin/psql,这就成功了。
      • 将 PGHOST 设置为 localhost 解决了我的问题。即使我在 postgresql.conf 中设置了套接字文件夹,psql 总是试图连接到 /tmp。谢谢!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-26
      • 2012-08-28
      • 1970-01-01
      • 1970-01-01
      • 2012-09-15
      • 1970-01-01
      • 2012-09-24
      相关资源
      最近更新 更多