มีวิธีการส่งออกฐานข้อมูล 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 script เพื่อแก้ไขดัมพ์ ฉันต้องการหลีกเลี่ยงการแก้ปัญหานั้น แต่ถ้าไม่มีทางเลือกอื่นฉันจะเอามัน มีใครเขียนสคริปต์เพื่อเปลี่ยนชื่อฐานข้อมูลของการถ่ายโอนข้อมูลเพื่อให้แน่ใจว่าไม่มีการเปลี่ยนแปลงข้อมูลหรือไม่?