PostgreSQL:如何转储和还原集群的角色?


27

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

我做了一个db的pg_dump,然后将它加载到另一个集群中,但是出现了很多这些错误:

psql:mydump.sql:3621: ERROR:  role "myrole" does not exist 

因此,显然我的数据库转储不包含角色。我尝试转储'postgres'数据库,但那里也看不到角色。

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

Postgresql版本8.4.8和9.1.4 OS:Ubuntu 11.04 Natty

Answers:


37

CREATE ROLE文档中

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

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

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

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


您是否可以添加如何还原所有角色(即无需筛选)?
伊桑·弗曼

1
要恢复所有角色,只需将输出复制并粘贴pg_dumpall --roles-only到所需的psql shell中。还是特定的CREATE ROLEALTER ROLE台词
费尔南多·法布雷蒂
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.