postgresql:如何转储和恢复集群的角色?

Rob*_*ark 40 postgresql dump role restore

角色存储在集群中的什么位置,如何转储它们?

我做了一个 db 的 pg_dump 然后将它加载到不同的集群中,但我收到了很多这些错误:

psql:mydump.sql:3621: ERROR:  role "myrole" does not exist 
Run Code Online (Sandbox Code Playgroud)

所以显然我的数据库的转储不包括角色。我尝试转储“postgres”数据库,但我也没有看到那里的角色。

我需要使用pg_dumpall --roles-only吗?

Postgresql 版本 8.4.8 和 9.1.4 操作系统:Ubuntu 11.04 Natty

dez*_*zso 51

CREATE ROLE文档

请注意,角色是在数据库集群级别定义的,因此在集群中的所有数据库中都有效。

由于pg_dump转储单个数据库,因此您无法使用该实用程序提取角色。pg_dumpall --roles-only您建议的命令将完成工作 - 但是您可能需要过滤其输出,以便在新集群中仅创建所需的角色。

角色存储在pg_authid目录中,目录data/global/与其他集群范围的表一起存储在PostgreSQL 安装的子文件夹中。可以pg_authid通过pg_roles视图查询内容。

注意:您将需要超级用户权限才能转储角色。否则,你会得到否认权限SELECTpg_authid-甚至当一个超级用户授予SELECT的权利,你会得到同样的错误。但是,在这种情况下,您可以通过pg_authid直接查询列出角色,将COPY其添加到文件中并使用一些魔法来创建必要的CREATE ROLEandALTER ROLE语句。

  • 您可以添加如何恢复所有角色(即不需要过滤)吗? (3认同)
  • 要恢复所有角色,只需将 `pg_dumpall --roles-only` 的输出复制并粘贴到所需的 psql shell 中。或者特定的“CREATE ROLE”和“ALTER ROLE”行 (2认同)