Чи є можливість експортувати базу даних PostgreSQL і пізніше імпортувати її з іншим ім'ям?
Я використовую PostgreSQL з Rails, і я часто експортую дані з виробництва, де база даних називається blah_production та імпортую її на розробку або постановку з іменами blah_development і blah_staging. У MySQL це банально, оскільки експорт не має ніде бази даних (крім коментаря, можливо), але на PostgreSQL це здається неможливим. Це неможливо?
Зараз я скидаю базу даних таким чином:
pg_dump blah > blah.dump
Я не використовую параметри -c або -C. Цей дамп містить такі заяви, як:
COMMENT ON DATABASE blah IS 'blah';
ALTER TABLE public.checks OWNER TO blah;
ALTER TABLE public.users OWNER TO blah;
Коли я намагаюся імпортувати с
psql blah_devel < blah.dump
я отримав
WARNING: database "blah" does not exist
ERROR: role "blah" does not exist
Може бути, проблема полягає не в базі даних, а в ролі?
Якщо я скидаю це так:
pg_dump --format=c blah > blah.dump
і спробуйте імпортувати його таким чином:
pg_restore -d blah_devel < tmp/blah.psql
Я отримую ці помилки:
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
Будь-які ідеї?
Я бачив там, де деякі люди використовують сценарії sed для модифікації дампа. Я хотів би уникнути цього рішення, але якщо немає альтернативи, я прийму його. Хтось написав сценарій, щоб змінити ім’я бази даних дампа, гарантуючи, що дані ніколи не змінюються?