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

day*_*mer 32 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
Run Code Online (Sandbox Code Playgroud)

这意味着我userrolesgrant信息不在pg_dump

另一方面,我们有pg_dumpall,我读过谈话,这不会引导我到任何地方?

问题
- 我应该使用哪一个进行数据库备份?pg_dump还是pg_dumpall
- 要求是我可以采取备份,应该能够导入任何机器,它应该工作得很好.

Cra*_*ger 54

通常的过程是:

  • pg_dumpall --globals-only 获得用户/角色/等
  • pg_dump -Fc为每个数据库获取适合使用的良好压缩转储pg_restore.

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

在写本新闻时(9.4)还有一个讨厌的警告这一做法:无论是pg_dump,还是pg_dumpall--globals-only模式中,将倾用户访问GRANT在S DATABASE秒.


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