Python 获取在postgresql中分配给用户的角色
我有一个postgreSQl数据库。我创建了几个数据库用户,并为每个用户分配了某些角色。在我的python程序中,我需要获得数据库的用户及其相应的角色。如何获取此信息?您可以对执行查询。试着看看桌子和桌子。它们的模式是:Python 获取在postgresql中分配给用户的角色,python,postgresql,roles,Python,Postgresql,Roles,我有一个postgreSQl数据库。我创建了几个数据库用户,并为每个用户分配了某些角色。在我的python程序中,我需要获得数据库的用户及其相应的角色。如何获取此信息?您可以对执行查询。试着看看桌子和桌子。它们的模式是: test=# \d pg_user View "pg_catalog.pg_user" Column | Type | Modifiers --------------+---------+----------- usename |
test=# \d pg_user
View "pg_catalog.pg_user"
Column | Type | Modifiers
--------------+---------+-----------
usename | name |
usesysid | oid |
usecreatedb | boolean |
usesuper | boolean |
userepl | boolean |
usebypassrls | boolean |
passwd | text |
valuntil | abstime |
useconfig | text[] |
test=# \d pg_roles
View "pg_catalog.pg_roles"
Column | Type | Modifiers
----------------+--------------------------+-----------
rolname | name |
rolsuper | boolean |
rolinherit | boolean |
rolcreaterole | boolean |
rolcreatedb | boolean |
rolcanlogin | boolean |
rolreplication | boolean |
rolconnlimit | integer |
rolpassword | text |
rolvaliduntil | timestamp with time zone |
rolbypassrls | boolean |
rolconfig | text[] |
oid | oid |
假设您使用psycopg2
通过Python连接到数据库,您可以对系统目录表执行查询:
import psycopg2
conn = psycopg2.connect(database="test", user='postgres')
cur = conn.cursor()
cur.execute('select * from pg_catalog.pg_user')
for row in cur.fetchall():
print(row)
cur.execute('select * from pg_catalog.pg_roles')
for row in cur.fetchall():
print(row)
下面是一个解决方案,它是基于SQL WHERE条件将前一个程序的两个不同查询组合成一个查询(假设您使用psycopg2使用Python连接到数据库)
这将列出DBMS中的所有用户和角色。但是,没有用户及其相应的角色。但是这个方法只提供用户和角色的列表。我需要具有相应角色的用户。我怎样才能实现呢?这个程序中有一些逻辑错误,这是正确的程序<代码>导入psycopg2 conn=psycopg2.connect(database=“postgres”,user='postgres')cur=conn.cursor()cur.execute('select*from pg_catalog.pg_user')用于cur.fetchall()中的行:打印(row)cur.execute('select*from pg_catalog.pg_roles'):打印(row)更正缩进。但是这个程序只给出用户和角色的列表。这不是一个解决方案。@Aravind:对表执行联接。为了查看结果,我在数据库中创建了4个用户和2个角色,并将分配的角色授予了3个用户。但是,我也可以在pg_角色表中看到这些用户。所以我得到的结果是,user1,user1。不是作为用户1,角色1尝试打印(行),而不是打印(行[0]+,“+行[1])。通过执行查询
从pg_用户、pg_角色中选择usename、rolname,其中oid=usesysid,验证您的结果代码>在pgadmin控制台上。“('postgres','postgres')('user1','user1')('user2','user2')('user3','user3')('user4','user4')”。。这就是我得到的结果
import psycopg2
conn = psycopg2.connect(database="postgres", user='postgres')
cur = conn.cursor()
cur.execute('SELECT usename,rolname FROM pg_user,pg_roles WHERE oid=usesysid;')
#print ('users&roles')
for row in cur.fetchall():
print(row[0]+','+row[1])