0

我有一个制作 PostgreSQL 备份的程序,并让用户有机会压缩这些备份:

if bkp_type == 'gz':
   command = 'pg_dumpall -U {} -h {} -p {} | gzip > {}'.format(user, server, port, file)
elif bkp_type == 'bz2':
   command = 'pg_dumpall -U {} -h {} -p {} | bzip2 > {}'.format(user, server, port, file)
elif bkp_type == 'zip':
   command = 'pg_dumpall -U {} -h {} -p {} | zip > {}'.format(user, server, port, file)
else:
   command = 'pg_dumpall -U {} -h {} -p {} > {}'.format(user, server, port, file)

result = subprocess.call(command, shell=True)

现在,我正在使用 pg_restore 来恢复它们,但如果文件被压缩,我就无法做到这一点。有什么方法可以直接使用 pg_restore(如 pg_dump 或 pg_dumpall)来完成,还是我必须检查使用的压缩类型并用 Python 解压缩它们?

4

1 回答 1

1

最后,我管理了这个解决方案来恢复由 pg_dump 生成的备份(还不是 pg_dumpall):

if ext == 'gz':
   command = 'gunzip -c {} -k | pg_restore -U {} -h {} -p {}' \
             '-d {}'.format(file, user, server, port, new_dbname)
elif ext == 'bz2':
   command = 'bunzip2 -c {} -k | pg_restore -U {} -h {} -p {}' \
             '-d {}'.format(file, user, server, port, new_dbname)
elif ext == 'zip':
   command = 'unzip -p {} | pg_restore -U {} -h {} -p {} ' \
             '-d {}'.format(file, user, server, port, new_dbname)
else:
   command = 'pg_restore -U {} -h {} -p {} -d {} {}'.format(user,
                server, port, new_dbname, file)
于 2014-05-09T16:40:07.897 回答