我try 了pg_dump次,然后在另一台机器上try 导入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

这意味着我的userrolesgrant信息不在pg_dump

On the other hand we have pg_dumpall, I read conversation, and this does not lead me anywhere?

Question

推荐答案

通常的过程是:

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

是的,这种很烂.我真的很想教pg_dump如何将pg_dumpall个输出嵌入到-Fc个转储中,但现在不幸的是,它不知道如何实现,所以你必须自己完成.

在PostgreSQL 11之前,这种方法还有一个令人讨厌的警告:--globals-only模式下的pg_dumppg_dumpall都不会在DATABASE上转储用户访问GRANT.所以你几乎必须从目录中提取它们,或者过滤pg_dumpall.这在PostgreSQL 11中是固定的;看release notes.

使pg_dump转储数据库的属性,而不仅仅是其内容(Haribabu Kommi)

以前,数据库本身的属性,例如数据库级别GRANT/REVOKE权限和ALTER DATABASE SET变量设置,只由pg_dumpall转储.现在,除了数据库中的对象之外,pg_dump --createpg_restore --create还将恢复这些数据库属性.pg_dumpall -g现在只转储与角色和表空间相关的属性.pg_dumpall的完整输出(不含-g)不变.


您还应该了解物理备份——pg_basebackup、PgBarman和WAL归档、PITR等.这些备份提供了"更细粒度"的恢复,可以进行到分钟或单个事务的恢复.缺点是它们占用更多空间,只能在同一平台上恢复到同一个PostgreSQL版本,并备份所有数据库中的所有表,而不能排除任何内容.

Postgresql相关问答推荐

计算两个子查询之间的差异

创建发布性能

在SqlalChemy中转义动态CamelCase场

如何创建一个触发器来传播对主键表的更新?

ST_Intersects 太慢

PostgreSQL 函数按名称传递参数

Postgresql如何从jsonB列的数组中的多个json中 Select 一个值

使用包含重复元素的数组 Select 重复值

为什么 SQLAlchemy 不创建串行列?

Docker Compose + Spring Boot + Postgres 连接

Mac psql/readline - 未加载库

在远程机器上Restore dump

返回 NULL 的空数组的 array_length()

Sidekiq - 无法在 5.000 秒内获得数据库连接

如何使用 psql 命令列出、创建、使用和判断数据库?

将 csv 文件中存在的 NULL 值复制到 postgres

Entity Framework Core jsonb 列类型

PostgreSQL 多种认证方式

PostgreSQL 9.1:如何连接数组中的行而不重复,加入另一个表

如何在 PostgreSQL 中生成一系列重复数字?