有没有一种方法可以导出PostgreSQL数据库,然后再使用其他名称导入它?
我在PostgreSQL上使用PostgreSQL,经常从生产环境中导出数据,在生产环境中,数据库称为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脚本修改转储。我想避免这种解决方案,但是如果没有其他选择,我会采取。是否有人编写脚本来更改转储的数据库名称,以确保没有数据被更改?