Est-il possible d'exporter une base de données PostgreSQL et de l'importer ultérieurement sous un autre nom?
J'utilise PostgreSQL avec Rails et j'exporte souvent les données de production, où la base de données s'appelle blah_production et les importe lors du développement ou de la mise en scène avec les noms blah_development et blah_staging. Sur MySQL, ceci est trivial car l’export n’a pas de base de données (sauf un commentaire), mais sur PostgreSQL, cela semble impossible. Est-ce impossible?
Je vide actuellement la base de données de cette façon:
pg_dump blah > blah.dump
Je n'utilise pas les options -c ou -C. Ce vidage contient des déclarations telles que:
COMMENT ON DATABASE blah IS 'blah';
ALTER TABLE public.checks OWNER TO blah;
ALTER TABLE public.users OWNER TO blah;
Quand j'essaie d'importer avec
psql blah_devel < blah.dump
Je reçois
WARNING: database "blah" does not exist
ERROR: role "blah" does not exist
Peut-être que le problème n'est pas vraiment la base de données mais le rôle?
Si je le vide de cette façon:
pg_dump --format=c blah > blah.dump
et essayez de l'importer de cette façon:
pg_restore -d blah_devel < tmp/blah.psql
Je reçois ces erreurs:
pg_restore: WARNING: database "blah" does not exist
pg_restore: [archiver (db)] Error while PROCESSING TOC:
pg_restore: [archiver (db)] Error from TOC entry 1513; 1259 16435 TABLE checks blah
pg_restore: [archiver (db)] could not execute query: ERROR: role "blah" does not exist
Command was: ALTER TABLE public.checks OWNER TO blah;
pg_restore: [archiver (db)] Error from TOC entry 1509; 1259 16409 TABLE users blah
pg_restore: [archiver (db)] could not execute query: ERROR: role "blah" does not exist
Command was: ALTER TABLE public.users OWNER TO blah;
pg_restore: [archiver (db)] Error from TOC entry 1508; 1259 16407 SEQUENCE users_id_seq blah
pg_restore: [archiver (db)] could not execute query: ERROR: role "blah" does not exist
Command was: ALTER TABLE public.users_id_seq OWNER TO blah;
pg_restore: [archiver (db)] Error from TOC entry 1824; 0 0 ACL public postgres
pg_restore: [archiver (db)] could not execute query: ERROR: role "postgres" does not exist
Command was: REVOKE ALL ON SCHEMA public FROM postgres;
pg_restore: [archiver (db)] could not execute query: ERROR: role "postgres" does not exist
Command was: GRANT ALL ON SCHEMA public TO postgres;
WARNING: errors ignored on restore: 11
Des idées?
J'ai vu des personnes utiliser des scripts sed pour modifier le vidage. J'aimerais é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 du cliché afin de s'assurer qu'aucune donnée n'est altérée?