Postgresql
postgres - 沒有角色的 pg_dump 和 pg_restore
我正在嘗試在接收數據庫上沒有適當角色的情況下恢復轉儲。
如here和here所述,您需要將the
--no-owner
作為一個選項,或者在其中pg_dump
或pg_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
,您只能跳過 中的角色和 ACLpg_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