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 に答える