32

je l'ai fait de sauvegarde sur la base de données sur un serveur différent et qui a un rôle différent que je dois, avec cette commande:Postgresql - sauvegarder la base de données et restaurer sur différents propriétaires?

pg_dump -Fc db_name -f db_name.dump 

Puis je copier la sauvegarde sur un autre serveur où je dois restaurer la base de données, mais il n'y a pas propriétaire qui a été utilisé pour cette base de données. Disons que la base de données a le propriétaire owner1, mais sur un serveur différent, j'ai seulement owner2 et j'ai besoin de restaurer cette base de données et de changer de propriétaire.

Ce que je l'ai fait sur un autre serveur lors de la restauration:

createdb -p 5433 -T template0 db_name 
pg_restore -p 5433 --role=owner2 -d db_name db_name.dump 

Mais quand la restauration est exécuté j'obtenir ces erreurs:

pg_restore: [archiver (db)] could not execute query: ERROR: role "owner1" does not exist 

Comment puis-je il préciser si changer le propriétaire? Ou est-ce impossible?

Répondre

47

Vous devez utiliser l'option --no-owner, cela arrête pg_restore en essayant de définir la propriété des objets pour le propriétaire d'origine. Au contraire, les objets seront la propriété de l'utilisateur spécifié par --role

createdb -p 5433 -T template0 db_name 
pg_restore -p 5433 --no-owner --role=owner2 -d db_name db_name.dump 

pg_restore doc

+5

'pg_dump --no-owner' devrait également faire –

+3

Ma préférence est de reporter ce genre de décisions jusqu'à ce que la restauration. Si vous le faites à la décharge, cela signifie que vous ne pouvez pas changer d'avis sans exporter. Le faire à la restauration signifie que les options sont laissées ouvertes au cas où vous décidiez que vous auriez vraiment dû créer ce rôle manquant etc. – Gary

+0

Donc si je veux changer de propriétaire, je dois sauvegarder sans propriétaire? Parce que je pensais que je pourrais changer de propriétaire lors de la restauration. Mais même en réglant '--role' sur un propriétaire différent, il essayait toujours d'utiliser le propriétaire d'origine (mais je n'utilisais pas' --no-owner'.) – Andrius