pg_dump vs pg_dumpall?哪一个用于数据库备份?

时间:2013-05-17 22:08:48

标签: postgresql database-backups

我尝试了pg_dump然后在另一台机器上尝试导入sql并填充数据库,我看到了

CREATE TABLE
ERROR:  role "prod" does not exist
CREATE TABLE
ERROR:  role "prod" does not exist
CREATE TABLE
ERROR:  role "prod" does not exist
CREATE TABLE
ERROR:  role "prod" does not exist
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
WARNING:  no privileges could be revoked for "public"
REVOKE
ERROR:  role "postgres" does not exist
ERROR:  role "postgres" does not exist
WARNING:  no privileges were granted for "public"
GRANT

这意味着我的userroles以及grant信息不在pg_dump

另一方面,我们pg_dumpall,我读了conversation,这不会引导我到任何地方?

问题
- 我应该使用哪一个进行数据库备份? pg_dumppg_dumpall
- 要求是我可以进行备份,并且应该能够导入任何机器,它应该可以正常工作。

1 个答案:

答案 0 :(得分:52)

通常的过程是:

  • pg_dumpall --globals-only获取用户/角色/ etc
  • pg_dump -Fc为每个数据库提供一个适合与pg_restore一起使用的漂亮的压缩转储。

是的,这种糟透了。我真的很想教pg_dumppg_dumpall输出嵌入到-Fc转储中,但现在不幸的是它不知道你必须自己如何做。

在撰写本文时(9.4),使用此方法也存在一个令人讨厌的警告:pg_dump模式中的pg_dumpall--globals-only都不会转储用户访问权限GRANTDATABASE s。


您还应该了解物理备份 - pg_basebackup,PgBarman和WAL归档,PITR等。这些可以提供更精细的恢复,最新或单个事务。缺点是它们占用更多空间,只能在同一平台上恢复到相同的PostgreSQL版本,并备份所有数据库中的所有表,无法排除任何内容。