Postgresql

postgresql:如何轉儲和恢復集群的角色?

  • July 31, 2015

角色儲存在集群中的什麼位置,如何轉儲它們?

我做了一個數據庫的 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

CREATE ROLE文件中:

請注意,角色是在數據庫集群級別定義的,因此在集群中的所有數據庫中都有效。

由於pg_dump轉儲單個數據庫,因此您無法使用該實用程序提取角色。您提出的pg_dumpall --roles-only命令將完成工作 - 但是您可能需要過濾其輸出,以便在新集群中僅創建所需的角色。

角色儲存在目錄中,該目錄與其他集群範圍的表一起pg_authid物理儲存在 PostgreSQL 安裝的子文件夾中。data/global/可以pg_authid通過pg_roles視圖查詢內容。

注意:您需要超級使用者權限才能轉儲角色。否則,您將在 onSELECT上獲得權限被拒絕pg_authid- 即使超級使用者授予SELECT權限,您也會收到相同的錯誤。pg_authid但是,在這種情況下,您可以通過直接查詢來列出角色,COPY將其寫入文件並滾動一些魔法來創建必要的CREATE ROLEALTER ROLE語句。

引用自:https://dba.stackexchange.com/questions/20986