django.db.utils.OperationalError: could not connect to server: No such file on Unix domain socket "/tmp/.s.PGSQL.5432"?

django.db.utils.OperationalError: could not connect to server: No such file on Unix domain socket "/tmp/.s.PGSQL.5432"?

当我将 Postgres 数据库连接到 Django 时,出现以下错误(附上屏幕截图)。当我使用直接数据库名称或用户等时,这工作正常但是当我通过环境变量使用时,它不起作用。

这是我的 setting.py 文件:

'ENGINE': 'django.db.backends.postgresql_psycopg2',

        'NAME': os.environ.get('DATABASE_NAME'),
        'USER': os.environ.get('DATABASE_USER'),
        'PASSWORD': os.environ.get('DATABASE_PASSWORD'),
        'HOST': os.environ.get('DATABASE_HOST'),
        'PORT': 5432
    this is my .bash_profile enviroment variable
    
     export DATABASE_NAME='blog'
     export DATABASE_USER='bloguser'
     export DATABASE_PASSWORD='blog@123'
     export DATABASE_HOST='localhost'

错误本身:

    self.connection = self.get_new_connection(conn_params)
  File "/home/kamran/anaconda3/envs/DjangoEnv/lib/python3.8/site-packages/django/db/backends/postgresql/base.py", line 178, in get_new_connection
    connection = Database.connect(**conn_params)
  File "/home/kamran/anaconda3/envs/DjangoEnv/lib/python3.8/site-packages/psycopg2/__init__.py", line 127, in connect
    conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
django.db.utils.OperationalError: 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"?

以及所附图片:https://i.stack.imgur.com/fqrZQ.png

PostgreSQL 不是 运行 或配置不正确。

在文件 /etc/postgresql/{version_number}/main/postgresql.conf

中更改 listen_address localhost to *
listen_addresses = '*'

pg_hba.conf中,在# IPv4 local connections中添加以下行:

host    all             all             0.0.0.0/0               md5

当然,您可以转到代码并将 pdb 放在 self.connection = self.get_new_connection(conn_params) 行之前,例如:

import pdb; pdb.set_trace()
self.connection = self.get_new_connection(conn_params)

运行 服务器,一旦它到达 pdb 行,您可以在运行时模式下与代码交互,它会显示一个 pdb 控制台,然后您可以查看是否是否设置了环境变量:

(pdb) p os.environ.get('DATABASE_NAME')
(pdb) p os.environ.get('DATABASE_USER')
...

它将允许您查看变量是否已设置以及是否具有正确的值。