我想获取python列表中Postgresql
服务器中所有数据库的列表。
基本上,然后我想创建那些insode另一个数据库
但我无法得到它。
这就是我试过的
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)
答案 0 :(得分:1)
使用pg_dumpall
和psql
作为超级用户
pg_dumpall -h localhost -U postgres -f pg_dumpall.sql
如果您只想复制架构,请使用--schema-only
参数。
将其还原到另一个群集
psql -f pg_dumpall.sql postgres
答案 1 :(得分:0)
您的解决方案中缺少的是阅读和解析您从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]]