运行 Django 的 syncdb 时 OSX 10.7.3 上的 Postgresql 套接字错误

Posted

技术标签:

【中文标题】运行 Django 的 syncdb 时 OSX 10.7.3 上的 Postgresql 套接字错误【英文标题】:Postgresql socket error on OSX 10.7.3 when running Django's syncdb 【发布时间】:2012-02-26 09:05:45 【问题描述】:

自从将 OSX 升级到 10.7.3 版本后,当我尝试运行 Django“syncdb”命令时,我从 Postgresql 8.4.2 收到以下 psycopg2 错误:

psycopg2.OperationalError: could not connect to server: No such file or directory
    Is the server running locally and accepting
    connections on Unix domain socket "/var/pgsql_socket/.s.PGSQL.5432"?

我可以毫无问题地打开 psql,但是当我尝试运行“pg_ctl status”时,我也收到了这个错误:

pg_ctl: could not open PID file "/Library/PostgreSQL/8.4/data/postmaster.pid": Permission denied

有关联吗?

【问题讨论】:

pg_ctl 是一个单独的问题,它必须以 postgres 用户身份运行,否则无法访问 pid 文件。当您运行 psql 时,您是否使用 -h 指定主机或 ip? 不,我没有指定主机。在 10.7.3 之前,我从来不需要。 我注意到在我的“psql -U postgres mydatabase”命令中添加“-h localhost”可以解决这个问题。在这方面有什么想法吗? 【参考方案1】:

我也遇到了同样的问题:将 osx 更新到 10.7.3,在我重新启动 postgres 服务器后,当我尝试运行通过 psycopg2 的$ ./manage.py dbshell 时遇到了同样的问题,但连接到 postgres 没有问题使用 psql。

在我看来,这个问题似乎与“Unix 域套接字上的连接”有关,因为 psycopg2 使用新的 10.7.3 osx 更新的 postgres 库。

我尝试重新安装 psycopg2,但没有任何改变。

因此,我更改了 django settings.py 的数据库部分的 HOST 值,而不是空字符串,我输入了 'localhost'

而且效果很好!

【讨论】:

我更改了“DATABASE_HOST”值,但问题仍然存在。 你在你的 postgresql.conf 中是否有这个变量设置为:listen_addresses = 'localhost'listen_addresses = '*' 否则 postgres 不允许你通过“网络”连接当然你必须检查一切是否在 pg_hba.conf 中也正确 我刚刚进行了建议的更改,重新启动了 Postgresql,问题仍然存在。 在从 10.6 升级到 10.8 且没有重新启动 Postgres 后,这对我有用。 非常好。我遇到过同样的问题。将 HOST 字符串更改为 localhost 并繁荣!像魅力一样工作。那令人沮丧。感谢您的提示!【参考方案2】:

Eelke 的问题和我的一样。 最快的解决方法是添加

export PGHOST=/tmp

.bashrc/.zshrc/etc 中的环境变量 文件(取决于您使用的文件)。

最好的解决方法是在您的应用配置文件中设置特定路径。

【讨论】:

我认为这是可行的,因为它会将您使用的 psql 从有问题的苹果改成安装 postgres 时使用的 psql? 我自己不是 bash 向导,但可能需要阅读 export PGHOST="/tmp"【参考方案3】:

在我的 Mac 上进行了一些测试,我注意到我的系统上有多个命令的两个版本。一个版本在 /usr/bin 中,另一个在 /Library/PostgreSQL/9.0/bin 中。 /usr/bin 中的版本需要 /var/pgsql_socket/.s.PGSQL.5432,我安装的正确版本需要 /tmp/.s.PGSQL.5432

/usr/bin 中的版本是 9.0.5,Apple 已经安装了。

不幸的是,我对 django 了解不多,但我敢打赌,它要么在错误的路径中调用命令,要么从错误的位置加载库。

【讨论】:

【参考方案4】:

您可以通过创建符号链接来解决问题:

 ln -s /tmp/.s.PGSQL.5432 /var/pgsql_socket/

【讨论】:

【参考方案5】:

这最终对我有用...

将settings.py中数据库字典中的HOST值改为:

'HOST': '/tmp',

来源: http://jeffammons.net/2011/09/fixing-postgres-on-mac-10-7-tiger-for-django

【讨论】:

【参考方案6】:

重新安装 psycopg2 对我有用

【讨论】:

这很可能是偶然的,一般不能解决问题。【参考方案7】:

我在升级到 OSX 10.7.3 后遇到了同样的问题;重新安装 PostgreSQL 解决了问题,并没有删除我现有的数据。

【讨论】:

以上是关于运行 Django 的 syncdb 时 OSX 10.7.3 上的 Postgresql 套接字错误的主要内容,如果未能解决你的问题,请参考以下文章

Django 1.5:使用 postgresql-psycopg2 运行“python manage.py syncdb”时 Windows 中的 OperationalError

Django-MySQL 启用 Row_Format=使用 syncdb 压缩

删除所有表以在 Django 中运行 syncdb 的最简单方法?

Django 1.8 和 syncdb / migrate 的 auth_user 错误

django 在服务器上的 syncdb 期间出错

指定多个数据库时,Django syncdb 尝试插入重复行