Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么在尝试使用psycopg2连接时出现对等身份验证失败错误?_Python_Python 3.x_Postgresql_Psycopg2 - Fatal编程技术网

Python 为什么在尝试使用psycopg2连接时出现对等身份验证失败错误?

Python 为什么在尝试使用psycopg2连接时出现对等身份验证失败错误?,python,python-3.x,postgresql,psycopg2,Python,Python 3.x,Postgresql,Psycopg2,因此,我在Ubuntu上成功安装了Postgres,并尝试进行一些基本连接,并使用默认用户名(Postgres)以外的另一个用户名在db中创建一个表。据我所知,我认为这可能与权限有关?我想要的是能够使用postgres以外的超级用户来创建表和做一些事情 “psql example3”和“\l”显示example3数据库已成功创建。我现在有一个数据库列表,其中包括默认postgres、template0、template1和example3,所有这些数据库的所有者都是postgres。然后我遇到的

因此,我在Ubuntu上成功安装了Postgres,并尝试进行一些基本连接,并使用默认用户名(Postgres)以外的另一个用户名在db中创建一个表。据我所知,我认为这可能与权限有关?我想要的是能够使用postgres以外的超级用户来创建表和做一些事情

“psql example3”和“\l”显示example3数据库已成功创建。我现在有一个数据库列表,其中包括默认postgres、template0、template1和example3,所有这些数据库的所有者都是postgres。然后我遇到的问题是运行demoscript.py会给出一个致命的“用户'thisuser'的对等身份验证失败”


预期的结果是todos表应该显示为在Example3DB中查找后创建的。但是我刚刚得到一个致命错误。

当您在连接中没有指定主机时,它会尝试通过Unix套接字进行连接。默认情况下,PostgreSQL设置为对这些用户使用对等身份验证,这意味着它会将PostgreSQL用户名与当前登录的OS用户进行比较。如果您将连接更改为:

connection = psycopg2.connect('dbname=example3 user=thisuser password=thispass host=localhost')

这将导致它使用TCP/IP连接的身份验证设置,这在我使用过的大多数系统上默认为密码身份验证。

谢谢!我假设对等身份验证需要类似“sudo-u postgres python demoscript.py”的东西,对吗?另外,如果指定了主机但没有提供密码(即,在用户创建过程中,密码字段留空),那么如果您以用户“postgres”的身份连接到数据库,那么该命令会起作用,您是否碰巧知道会发生什么。对等身份验证将Postgres用户名与运行试图连接的程序的操作系统用户进行比较,如果两者相同,则允许访问。至于创建一个没有密码的用户,我不确定结果会是什么,但我怀疑使用密码身份验证的连接会失败。有关配置postgres如何对用户进行身份验证的更多信息,请参阅
#demoscript.py
import psycopg2 
connection = psycopg2.connect('dbname=example3 user=thisuser password=thispass')
cursor = connection.cursor()
cursor.execute('DROP TABLE IF EXISTS todos;')

cursor.execute('''
    CREATE TABLE todos(
        id serial PRIMARY KEY,
        description VARCHAR NOT NULL
        );
''')
connection.commit()
cursor.close()
connection.close()
connection = psycopg2.connect('dbname=example3 user=thisuser password=thispass host=localhost')