我尝试了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
这意味着我的user
和roles
以及grant
信息不在pg_dump
另一方面,我们pg_dumpall
,我读了conversation,这不会引导我到任何地方?
问题
- 我应该使用哪一个进行数据库备份? pg_dump
或pg_dumpall
?
- 要求是我可以进行备份,并且应该能够导入任何机器,它应该可以正常工作。
答案 0 :(得分:52)
通常的过程是:
pg_dumpall --globals-only
获取用户/角色/ etc pg_dump -Fc
为每个数据库提供一个适合与pg_restore
一起使用的漂亮的压缩转储。是的,这种糟透了。我真的很想教pg_dump
将pg_dumpall
输出嵌入到-Fc
转储中,但现在不幸的是它不知道你必须自己如何做。
在撰写本文时(9.4),使用此方法也存在一个令人讨厌的警告:pg_dump
模式中的pg_dumpall
和--globals-only
都不会转储用户访问权限GRANT
在DATABASE
s。
您还应该了解物理备份 - pg_basebackup
,PgBarman和WAL归档,PITR等。这些可以提供更精细的恢复,最新或单个事务。缺点是它们占用更多空间,只能在同一平台上恢复到相同的PostgreSQL版本,并备份所有数据库中的所有表,无法排除任何内容。