PostgreSQL - 用户"postgres"的对等身份验证失败



我有一个在Windows机器上运行的机器人,我最近买了一台Ubuntu虚拟服务器。在一系列类似无限的错误之后,我只是完全重置了服务器,然后从头开始重试。你可以在这里看到我以前的一些错误的另一篇文章:主机没有pg_hba.conf条目/连接调用失败/集群12的无效数据目录main-Postgresql Ubuntu

所以现在当我试图启动我的机器人时,它会给我这个错误:

Traceback (most recent call last):
File "bot.py", line 950, in <module>
bot.loop.run_until_complete(create_db_pool())
File "/usr/lib/python3.8/asyncio/base_events.py", line 616, in run_until_complete
return future.result()
File "bot.py", line 160, in create_db_pool
bot.pg_con = await asyncpg.create_pool(database='xxx', user='postgres', password='???')
File "/usr/local/lib/python3.8/dist-packages/asyncpg/pool.py", line 398, in _async__init__
await self._initialize()
File "/usr/local/lib/python3.8/dist-packages/asyncpg/pool.py", line 426, in _initialize
await first_ch.connect()
File "/usr/local/lib/python3.8/dist-packages/asyncpg/pool.py", line 125, in connect
self._con = await self._pool._get_new_connection()
File "/usr/local/lib/python3.8/dist-packages/asyncpg/pool.py", line 468, in _get_new_connection
con = await connection.connect(
File "/usr/local/lib/python3.8/dist-packages/asyncpg/connection.py", line 1718, in connect
return await connect_utils._connect(
File "/usr/local/lib/python3.8/dist-packages/asyncpg/connect_utils.py", line 663, in _connect
con = await _connect_addr(
File "/usr/local/lib/python3.8/dist-packages/asyncpg/connect_utils.py", line 642, in _connect_addr
await asyncio.wait_for(connected, timeout=timeout)
File "/usr/lib/python3.8/asyncio/tasks.py", line 483, in wait_for
return fut.result()
asyncpg.exceptions.InvalidAuthorizationSpecificationError: Peer authentication failed for user "postgres"

不过,数据库、用户和密码都是正确的。它现在还在工作,因为机器人正在我的Windows机器上运行,这就是为什么我认为这是Ubuntu特有的问题。我的侦听地址设置为";

listen_addresses = '*'

本地windows服务器上的pg_hba.conf:

# TYPE  DATABASE        USER            ADDRESS            METHOD
# IPv4 local connections:
host    all             all             0.0.0.0/0            md5
# IPv6 local connections:
host    all             all             ::0/                 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
host    replication     all             0.0.0.0/0            md5
host    replication     all             ::0/                 md5

我在Ubuntu服务器上的pg_hba.conf设置为:

# Database administrative login by Unix domain socket
local   all             postgres                                peer
# TYPE  DATABASE        USER            ADDRESS                 METHOD
# "local" is for Unix domain socket connections only
local   all             all                                     peer
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     peer
host    replication     all             127.0.0.1/32            md5
host    replication     all             ::1/128                 md5

如果我把第一行从peer改为md5,我得到:

asyncpg.exceptions.InvalidPasswordError: password authentication failed for user "postgres"

并且更改为CCD_ 3表示没有数据库CCD_。键入ps ax | grep postgres显示:

9929 ?        Ss     0:02 /usr/lib/postgresql/12/bin/postgres -D /var/lib/pos           tgresql/12/main -c config_file=/etc/postgresql/12/main/postgresql.conf
9931 ?        Ss     0:00 postgres: 12/main: checkpointer
9932 ?        Ss     0:01 postgres: 12/main: background writer
9933 ?        Ss     0:01 postgres: 12/main: walwriter
9934 ?        Ss     0:01 postgres: 12/main: autovacuum launcher
9935 ?        Ss     0:01 postgres: 12/main: stats collector
9936 ?        Ss     0:00 postgres: 12/main: logical replication launcher
21821 pts/0    S+     0:00 grep --color=auto postgres

我已经被这个问题困扰了很长时间,我不知道该怎么办。我真的希望有人知道这个问题,我希望我已经提供了足够的信息。非常感谢。

我认为它试图连接到Ubuntu服务器上的数据库,而不是我Windows机器上的数据库。如何使它以Windows计算机为目标?

client.pg_con = await asyncpg.create_pool(database=database, user=user, password=password, host="127.0.0.1")

添加主机=";127.0.0.1";同样,这也解决了我的问题。

最新更新