Postgresql
postgresql:如何轉儲和恢復集群的角色?
角色儲存在集群中的什麼位置,如何轉儲它們?
我做了一個數據庫的 pg_dump,然後將它載入到另一個集群中,但是我得到了很多這些錯誤:
psql:mydump.sql:3621: ERROR: role "myrole" does not exist
所以顯然我的數據庫的轉儲不包括角色。我嘗試轉儲“postgres”數據庫,但我也看不到那裡的角色。
我需要使用
pg_dumpall --roles-only
嗎?Postgresql 版本 8.4.8 和 9.1.4 作業系統:Ubuntu 11.04 Natty
請注意,角色是在數據庫集群級別定義的,因此在集群中的所有數據庫中都有效。
由於
pg_dump
轉儲單個數據庫,因此您無法使用該實用程序提取角色。您提出的pg_dumpall --roles-only
命令將完成工作 - 但是您可能需要過濾其輸出,以便在新集群中僅創建所需的角色。角色儲存在目錄中,該目錄與其他集群範圍的表一起
pg_authid
物理儲存在 PostgreSQL 安裝的子文件夾中。data/global/
可以pg_authid
通過pg_roles
視圖查詢內容。注意:您需要超級使用者權限才能轉儲角色。否則,您將在 on
SELECT
上獲得權限被拒絕pg_authid
- 即使超級使用者授予SELECT
權限,您也會收到相同的錯誤。pg_authid
但是,在這種情況下,您可以通過直接查詢來列出角色,COPY
將其寫入文件並滾動一些魔法來創建必要的CREATE ROLE
和ALTER ROLE
語句。