运行 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 的最简单方法?