Y a-t-il un moyen d'exporter une base de données PostgreSQL et de l'importer plus tard avec un autre nom?
Je suis PostgreSQL avec Rails et j'exporte souvent les données de la production, où la base de données s'appelle blah_production et les importe sur le développement ou la mise en scène avec les noms blah_development et blah_staging. Sur MySQL, c'est trivial car l'exportation ne contient nulle part la base de données (sauf peut-être un commentaire), mais sur PostgreSQL, cela semble impossible. Est-ce impossible?
Je fais actuellement une sauvegarde de la base de données de cette manière:
pg_dump blah > blah.dump
Je n'utilise pas les options -c ou -C. Cette sauvegarde contient des instructions telles que:
COMMENTAIRE SUR LA BASE DE DONNÉES blah IS 'blah';
MODIFIER LA TABLE public.checks PROPRIÉTAIRE À blah;
MODIFIER LA TABLE public.users PROPRIÉTAIRE À blah;
Quand j'essaie d'importer avec
psql blah_devel < blah.dump
Je reçois
AVERTISSEMENT: la base de données "blah" n'existe pas
ERREUR: le rôle "blah" n'existe pas
Peut-être que le problème n'est pas vraiment la base de données mais le rôle?
Si je le fais de cette façon:
pg_dump --format=c blah > blah.dump
et essaye de l'importer de cette façon:
pg_restore -d blah_devel < tmp/blah.psql
Je reçois ces erreurs:
pg_restore: AVERTISSEMENT: la base de données "blah" n'existe pas
pg_restore: [archiver (db)] Erreur lors du TRAITEMENT DE TOC:
pg_restore: [archiver (db)] Erreur dans l'entrée TOC 1513; 1259 16435 TABLE checks blah
pg_restore: [archiver (db)] impossible d'exécuter la requête: ERREUR: le rôle "blah" n'existe pas
La commande était: MODIFIER LA TABLE public.checks PROPRIÉTAIRE À blah;
pg_restore: [archiver (db)] Erreur dans l'entrée TOC 1509; 1259 16409 TABLE users blah
pg_restore: [archiver (db)] impossible d'exécuter la requête: ERREUR: le rôle "blah" n'existe pas
La commande était: MODIFIER LA TABLE public.users PROPRIÉTAIRE À blah;
pg_restore: [archiver (db)] Erreur dans l'entrée TOC 1508; 1259 16407 SÉQUENCE users_id_seq blah
pg_restore: [archiver (db)] impossible d'exécuter la requête: ERREUR: le rôle "blah" n'existe pas
La commande était: MODIFIER LA TABLE public.users_id_seq PROPRIÉTAIRE À blah;
pg_restore: [archiver (db)] Erreur dans l'entrée TOC 1824; 0 0 ACL public postgres
pg_restore: [archiver (db)] impossible d'exécuter la requête: ERREUR: le rôle "postgres" n'existe pas
La commande était: RÉVOQUEZ TOUT SUR LE SCHÉMA public PAR postgres;
pg_restore: [archiver (db)] impossible d'exécuter la requête: ERREUR: le rôle "postgres" n'existe pas
La commande était: ACCORDER TOUT SUR LE SCHÉMA public À postgres;
AVERTISSEMENT: erreurs ignorées lors de la restauration: 11
Des idées?
J'ai vu des gens utiliser des scripts sed pour modifier la sauvegarde. Je préférerais éviter cette solution mais s'il n'y a pas d'alternative, je la prendrai. Quelqu'un a-t-il écrit un script pour modifier le nom de la base de données de la sauvegarde pour s'assurer qu'aucune donnée n'est jamais modifiée?