Postgresql

postgres - 沒有角色的 pg_dump 和 pg_restore

  • February 15, 2021

我正在嘗試在接收數據庫上沒有適當角色的情況下恢復轉儲。

here和here所述,您需要將the--no-owner作為一個選項,或者在其中pg_dumppg_restore兩者中。

我使用以下命令行來創建我的轉儲:

"C:\Program Files\PostgreSQL\9.3\bin\pg_dump.exe" --no-owner -Ft --dbname=postgresql://avo******:AV0******?@127.0.0.1:5432/BI_DB > K:\BI\backup\sort\bck_%timestamp%.tar

恢復線如下:

"C:\Program Files\PostgreSQL\9.3\bin\pg_restore.exe" --host localhost --port 5432 --username "postgres" --dbname "BI_TEST2" --no-password  --no-owner --role=postgres --exit-on-error --verbose "D:\D\avo\backup\bck_04042017_1410.tar"

如您所見,兩者都可以--no-owner選擇,但最終出現以下錯誤:

在此處輸入圖像描述

讓我非常煩惱的是下面的日誌:

pg_restore: [programme d'archivage (db)] Erreur pendant le traitement de la TOC (« PROCESSING TOC ») :
pg_restore: [programme d'archivage (db)] Erreur à partir de l'entrée TOC 2633 ; 0 0 ACL adm avo******
pg_restore: [programme d'archivage (db)] could not execute query: ERREUR:  role « avo****** » does not exist

為什麼即使指定了角色,它也說它需要一個角色--no-owner

我錯過了什麼?

我在 Postgres 9.3 上執行

pg_restore設置 ACL時發生錯誤:您可以使用--no-acl來阻止GRANT命令。

使用 中的-Ft選項pg_dump,您只能跳過 中的角色和 ACL pg_restore--list如果您需要更多詳細資訊,還可以編輯目錄。

使用 PostgreSQL 12.4:

$ pg_dump --help
...
-O, --no-owner               skip restoration of object ownership in
                            plain-text format
...
-x, --no-privileges          do not dump privileges (grant/revoke)

這是一個例子:

$ pg_dump -O -x mydb_development | gzip > mydb-2020-09-22.bak.gz

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