web-dev-qa-db-fra.com

postgres - pg_dump et pg_restore sans rôles

J'essaie de restaurer un vidage sans avoir les rôles appropriés sur la base de données réceptrice.

Comme mentionné ici mais aussi ici , vous devez avoir le --no-owner en option, soit dans pg_dump ou pg_restore ou les deux

J'ai utilisé la ligne de commande suivante pour créer mon vidage

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

La ligne de restauration est comme suit

"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"

Comme vous pouvez le voir, les deux ont le --no-owner option mais finalement, j'ai l'erreur ci-dessous

enter image description here

Ce qui me dérange le plus, c'est le journal ci-dessous

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

Pourquoi dit-il qu'il a besoin d'un rôle même si le --no-owner a été spécifié?

Ai-je oublié quelque chose?

Addendum: je cours sur Postgres 9.3

À votre santé

11
Andy K

L'erreur se produit lorsque pg_restore définissez les ACL: vous pouvez utiliser --no-acl pour empêcher les commandes GRANT.

Avec le -Ft option dans pg_dump, vous pouvez ignorer les rôles et les listes de contrôle d'accès uniquement dans pg_restore. Vous pouvez également modifier le catalogue avec --list si vous avez besoin de plus de détails.

13
slardiere