如何在Python中获取PostgreSQL的数据库列表

3 投票
2 回答
6228 浏览
提问于 2025-04-18 10:39

我想在 Postgresql 服务器中获取所有数据库的列表,并把它们放到一个 Python 列表里。然后我想在另一个数据库里创建这些数据库。但是我现在还没有成功。

这是我尝试过的代码

config_read = {
          'host':'psql-002',
          'database':'tesdb',
          'user':'pguser',
          'port':'5432',
          'password':'mypass'
          }


class ExportPSQL():

    def __init__(self):
        try:
            conn = psycopg2.connect(**config_read) 
            self.conn = conn
        except:
            print "Eror Connecting database"  

    def run(self):
    # Get a list of databases with :
        db_command=" psql -h localhost -U pguser tesdb -c '\l'"
        db_list = os.popen(db_command)

2 个回答

2

你解决方案中缺少的部分是如何读取和解析从 psql 获取的信息:

def get_database_info(host, user):
    records, _ = subprocess.Popen(['psql','-lA','-F\x02','-R\x01','-h',host,'-U',user ],stdout=subprocess.PIPE).communicate()
    records = records.split('\x01')
    header = records[1].split('\x02')
    return [dict(zip(header,line.split('\x02'))) for line in records[2:-1]]
2

你可以通过 pg_dumpallpsql 这两个工具来完成所有操作,前提是你需要有超级用户的权限。

pg_dumpall -h localhost -U postgres -f pg_dumpall.sql

如果你只想复制数据库的结构(也就是表的设计),可以使用 --schema-only 这个参数。

如果你想把它恢复到另一个数据库集群中,可以使用下面的命令:

psql -f pg_dumpall.sql postgres

撰写回答