7

我花了几个小时来解决这些问题,但没有解决任何问题。网上有几个关于这个问题的话题,但没有一个说绝对可以解决这个问题。

我刚刚安装了 postgresql 以便在我的 django 项目中使用它。

DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.postgresql_psycopg2", # Add "postgresql_psycopg2", "postgresql", "mysql", "sqlite3" or "oracle".
        "NAME": "name",                       # Or path to database file if using sqlite3.
        "USER": "postgres",                             # Not used with sqlite3.
        "PASSWORD": "pass",                         # Not used with sqlite3.
        "HOST": "",                             # Set to empty string for localhost. Not used with sqlite3.
        "PORT": "",                             # Set to empty string for default. Not used with sqlite3.
    }
}

这是我的 settings.py,错误是

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

有人对此有解决方案吗?

4

3 回答 3

17

您需要找到一个 postgres 套接字。检查主 postgres 进程 pid ( ps auxw | grep postgres) 并列出其打开的 unix 套接字 ( lsof -p [PID_OF_POSTGRES_PROCESS] | grep unix)。将此路径写入HOST选项中settings.py

从分发包apt-get install postgresqlsettings.py

于 2012-05-31T11:06:16.887 回答
12

这是另一种可能性:如果您在现有版本上安装了新版本的 PostgreSQL,安装程序可能已为其分配了一个非标准端口号。

Django 期望 PostgreSQL 监听端口 5432。即使你使用的是 Unix 套接字,套接字也是以端口号命名的,所以这仍然很重要!

检查/etc/postgresql/<version>/main/postgresql.conf线路port = nnnn。如果那个数字不是 5432,那是你的问题。另一个指标是您的套接字文件/var/run/postgresql.s.PGSQL.5433使用非标准端口号调用类似的东西。

要修复它,您可以编辑端口号postgresql.conf以使用默认(5432),或者如果您需要它在非标准端口号上运行,然后DATABASE_PORT = 'nnnn'在您的 django中设置settings.py

感谢Erik Forsberg的指点!

于 2012-11-21T01:25:21.850 回答
2

在当代的 Fedora 系统上,添加了一个私有临时目录功能,它会导致这种症状。https://fedoraproject.org/wiki/Features/ServicesPrivateTmp

此功能导致 Web 应用程序使用与默认 PostgreSQL 域 socked 所在的系统 /tmp 目录不同的 tmp 目录。

要在 Fedora 上为 Apache-httpd 更改此功能的 systemd 指令,请编辑文件/usr/lib/systemd/system/httpd.service并将其更改PrivateTmp=truePrivateTmp=false

或者,您可以避免使用域套接字来避免此问题。

于 2014-02-10T17:24:33.593 回答