数据库 PostgreSQL 中的访问错误

Posted

技术标签:

【中文标题】数据库 PostgreSQL 中的访问错误【英文标题】:Access error in database PostgreSQL 【发布时间】:2019-02-01 21:02:03 【问题描述】:

编辑跳过第一部分,我发现(好吧,他们告诉我)问题出在数据库 \edit

我有一个 python+django 项目,我保存在两台计算机上。我的意思是有两个相同项目的副本,有时我在一个工作,有时在另一个工作。通过复制粘贴,我丢失了 settings.py 中的密钥(它们不同,但我覆盖了)。我不知道密钥的生成和存储是如何工作的,但为了恢复,我开始了一个新项目,获取密钥并复制如下文件:

1) 制作项目的副本

2) 删除原始项目,但保留副本

3) 开始了一个同名的新项目(因此,在与原始项目相同的文件夹中)

4) 复制了新的密钥

5) 将旧项目副本中的文件复制到新项目中(因此 settings.py 丢失了,新的密钥也随之丢失,但我有一个副本)

6) 用新的密钥更改了密钥

但这不起作用,它会给出与以前相同的错误:

System check identified no issues (0 silenced).
Unhandled exception in thread started by <function check_errors.<locals>.wrapper
at 0x0000000004ADAEA0>
Traceback (most recent call last):
  File "C:\Users\Fabio\Envs\possedimenti\lib\site-packages\django\db\backends\ba
se\base.py", line 216, in ensure_connection
    self.connect()
  File "C:\Users\Fabio\Envs\possedimenti\lib\site-packages\django\db\backends\ba
se\base.py", line 194, in connect
    self.connection = self.get_new_connection(conn_params)
  File "C:\Users\Fabio\Envs\possedimenti\lib\site-packages\django\db\backends\po
stgresql\base.py", line 174, in get_new_connection
    connection = Database.connect(**conn_params)
  File "C:\Users\Fabio\Envs\possedimenti\lib\site-packages\psycopg2\__init__.py"
, line 130, in connect
    conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
psycopg2.OperationalError: FATALE:  autenticazione con password fallita per l'ut
ente "gm"


The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "C:\Users\Fabio\Envs\possedimenti\lib\site-packages\django\utils\autorelo
ad.py", line 225, in wrapper
    fn(*args, **kwargs)
  File "C:\Users\Fabio\Envs\possedimenti\lib\site-packages\django\core\managemen
t\commands\runserver.py", line 120, in inner_run
    self.check_migrations()
  File "C:\Users\Fabio\Envs\possedimenti\lib\site-packages\django\core\managemen
t\base.py", line 442, in check_migrations
    executor = MigrationExecutor(connections[DEFAULT_DB_ALIAS])
  File "C:\Users\Fabio\Envs\possedimenti\lib\site-packages\django\db\migrations\
executor.py", line 18, in __init__
    self.loader = MigrationLoader(self.connection)
  File "C:\Users\Fabio\Envs\possedimenti\lib\site-packages\django\db\migrations\
loader.py", line 49, in __init__
    self.build_graph()
  File "C:\Users\Fabio\Envs\possedimenti\lib\site-packages\django\db\migrations\
loader.py", line 209, in build_graph
    self.applied_migrations = recorder.applied_migrations()
  File "C:\Users\Fabio\Envs\possedimenti\lib\site-packages\django\db\migrations\
recorder.py", line 61, in applied_migrations
    if self.has_table():
  File "C:\Users\Fabio\Envs\possedimenti\lib\site-packages\django\db\migrations\
recorder.py", line 44, in has_table
    return self.Migration._meta.db_table in self.connection.introspection.table_
names(self.connection.cursor())
  File "C:\Users\Fabio\Envs\possedimenti\lib\site-packages\django\db\backends\ba
se\base.py", line 255, in cursor
    return self._cursor()
  File "C:\Users\Fabio\Envs\possedimenti\lib\site-packages\django\db\backends\ba
se\base.py", line 232, in _cursor
    self.ensure_connection()
  File "C:\Users\Fabio\Envs\possedimenti\lib\site-packages\django\db\backends\ba
se\base.py", line 216, in ensure_connection
    self.connect()
  File "C:\Users\Fabio\Envs\possedimenti\lib\site-packages\django\db\utils.py",
line 89, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "C:\Users\Fabio\Envs\possedimenti\lib\site-packages\django\db\backends\ba
se\base.py", line 216, in ensure_connection
    self.connect()
  File "C:\Users\Fabio\Envs\possedimenti\lib\site-packages\django\db\backends\ba
se\base.py", line 194, in connect
    self.connection = self.get_new_connection(conn_params)
  File "C:\Users\Fabio\Envs\possedimenti\lib\site-packages\django\db\backends\po
stgresql\base.py", line 174, in get_new_connection
    connection = Database.connect(**conn_params)
  File "C:\Users\Fabio\Envs\possedimenti\lib\site-packages\psycopg2\__init__.py"
, line 130, in connect
    conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
django.db.utils.OperationalError: FATALE:  autenticazione con password fallita p
er l'utente "gm"

翻译:用户“gm”的密码验证失败

我不确定第一次发生的时间,但我还有另一个问题,可能与此有关:我无法访问数据库。也许这是第一个问题的原因,而不是密钥。

我使用 PostgreSQL,并使用实用程序标准 pgAdmin III 访问它。它给了我服务器的初始屏幕:PostgreSQL 9.5,我右键单击它并选择连接,它要求我输入密码,我给出但它抛出一个错误:

An error has occurred. Error connecting to the server: FATALE: autenticazione con password fallita per l'utente 'postgres'.

翻译:用户“postgres”的密码验证失败

我只创建了一个数据库和一个用户,所以我有标准的 postgres 和我的数据库 'possedimenti_db' 和一个名为 'gm' 的用户。

我能做什么?我不介意存在的数据,我可以删除所有数据,但如果它不能让我访问,我不知道如何删除。

谢谢

我的settings.py

DATABASES = 
    'default': 
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'possedimenti_db',
        'USER': 'gm',
        'PASSWORD': database_key,
        'HOST': host_key,
        'PORT': '5432',
    

database_keyhost_key 是从外部文件导入的。

此外,database_key 与我使用 pgAdmin 访问数据库时使用的密码不同。在我的另一台电脑上它可以工作。我试图用其他密码更改它,但它还是抛出了同样的错误。

编辑 您可以在答案的 cmets 中阅读解决方案,但问题是我的用户没有确定密码。

【问题讨论】:

Django 密钥与 PostgreSQL 密码无关。搜索“postgres 重置用户/管理员密码”。 是的,但我不知道哪个是我的问题:密钥还是数据库密码?我不认为使用了错误的密码。无论如何,我会按照您的建议进行搜索 尝试直接连接 Postgres,而不是从 Django。检查运行 Django 应用程序时实际使用的设置文件和/或 .env 文件。 我不知道您为什么认为这与密钥有关。该错误清楚地告诉您出了什么问题:数据库密码。它没有提到密钥,这不是问题。 我在 PostgreSQL 中更改了密码(pg_hba.conf 设置为信任)并重新启动服务器(services.msc => 重新启动)。将 pg_hba 重置为 md5。现在我可以使用 pgAdmin 访问数据库,但在 runserver 上我有同样的错误。我在上面添加相关设置 【参考方案1】:

使用“django.db.backends.postgresql_psycopg2”而不是“django.db.backends.postgresql”。

您必须安装 psycopg2。使用这个命令: pip install psycopg2

示例如下:

DATABASES = 
    'default': 
        'ENGINE': 'django.db.backends.postgresql_psycopg2', 
        'NAME': 'team_db',                     
        'USER': 'jason',                      
        'PASSWORD': 'abcd',                 
        'HOST': 'localhost',                    
        'PORT': '5432',                      
    

【讨论】:

我已经安装了 psycopg2。我对引擎进行了更改,但没有任何区别:同样的错误。 用户 gm 必须拥有 postgres 中的所有权限,他必须是管理员或超级用户。用户 gm 是简单用户还是管理员? 这是一个用户。没有创建数据库,没有创建角色,没有超级用户,没有复制。我更改了所有这些,并重新启动了 postgres 服务器,但没有任何改变。它给出了同样的错误。你看到op的变化了吗?最后一个关于密码的。 尝试硬写密码和主机如下: 'PASSWORD': 'abcd', 'HOST': 'localhost',如果有效,说明你的两个变量:database_key, host_key 是不可调用。做测试看看 好的,谢谢我解决了。我的 gm 用户没有确定密码。在我使用另一个用户之前,当我创建 gm 时,我忘记了添加密码。所以数据库有一个密码,gm 在我的 settings.py 中有另一个密码,我没有使用与访问数据库相同的密码。

以上是关于数据库 PostgreSQL 中的访问错误的主要内容,如果未能解决你的问题,请参考以下文章

Postgresql中的Inner Join子查询导致错误

Capistrano 与 PostgreSQL,错误:其他用户正在访问数据库

通过角色为 PostgreSQL 中的用户创建

重新postgresql出现错误:Problem running post-install step. Installation may not complete correctly. The dat

从 POST 访问中隐藏 Node.js&Express 中的错误消息

Slick 2 中的多个 PostgreSQL 数据库(同一服务器)访问