Python 获取在postgresql中分配给用户的角色

Python 获取在postgresql中分配给用户的角色,python,postgresql,roles,Python,Postgresql,Roles,我有一个postgreSQl数据库。我创建了几个数据库用户,并为每个用户分配了某些角色。在我的python程序中,我需要获得数据库的用户及其相应的角色。如何获取此信息?您可以对执行查询。试着看看桌子和桌子。它们的模式是: test=# \d pg_user View "pg_catalog.pg_user" Column | Type | Modifiers --------------+---------+----------- usename |

我有一个postgreSQl数据库。我创建了几个数据库用户,并为每个用户分配了某些角色。在我的python程序中,我需要获得数据库的用户及其相应的角色。如何获取此信息?

您可以对执行查询。试着看看桌子和桌子。它们的模式是:

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])