[英]PostgreSQL - Peer authentication failed for user “postgres”
I have a bot that runs on my Windows machine and I recently bought an Ubuntu virtual server.我有一个在我的 Windows 机器上运行的机器人,我最近购买了 Ubuntu 虚拟服务器。 After a series of like infinite errors, I just reset the server completely and retrying from scratch.
在一系列类似的无限错误之后,我只是完全重置服务器并从头开始重试。 You can look here to see another post of some of my previous errors: no pg_hba.conf entry for host / Connect call failed / Invalid data directory for cluster 12 main - Postgresql Ubuntu
您可以在这里查看我以前的一些错误的另一篇文章: 主机没有 pg_hba.conf 条目/连接调用失败/集群 12 主的数据目录无效 - Postgresql Ubuntu
So now when I try to start my bot, it gives me this error:所以现在当我尝试启动我的机器人时,它给了我这个错误:
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"
The database, user, and password are all correct though.数据库、用户和密码都是正确的。 It's working even right now as the bot is running on my Windows machine, which is why I think this is an Ubuntu specific issue.
它现在仍在工作,因为该机器人正在我的 Windows 机器上运行,这就是为什么我认为这是 Ubuntu 特定问题的原因。 My listen addresses set to"
我的收听地址设置为“
listen_addresses = '*'
pg_hba.conf on local windows server:本地 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
and my pg_hba.conf on Ubuntu server set to:我在 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
If I change the first line from peer
to md5
, I get:如果我将第一行从
peer
更改为md5
,我会得到:
asyncpg.exceptions.InvalidPasswordError: password authentication failed for user "postgres"
and changing to trust
says that there is no database xxx
which is the database on my local Windows machine.并更改为
trust
表示没有数据库xxx
,这是我本地 Windows 机器上的数据库。 Typing ps ax | grep postgres
打字
ps ax | grep postgres
ps ax | grep postgres
shows: 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
I've been stuck on this for a really long time and I have no idea what to do.我已经坚持了很长时间,我不知道该怎么做。 I really hope someone knows the issue and I hope I've given enough information.
我真的希望有人知道这个问题,我希望我已经提供了足够的信息。 Thank you.
谢谢你。
I think its trying to connect to a database on the Ubuntu server instead of the database on my Windows machine.我认为它试图连接到 Ubuntu 服务器上的数据库,而不是我的 Windows 机器上的数据库。 How do I make it target the Windows machine?
如何使其针对 Windows 机器?
client.pg_con = await asyncpg.create_pool(database=database, user=user, password=password, host="127.0.0.1")
Add host="127.0.0.1" as well, this solved my problem.也添加 host="127.0.0.1" ,这解决了我的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.