Có cách nào để xuất cơ sở dữ liệu PostgreQuery và sau đó nhập nó với tên khác không?
Tôi đang sử dụng PostgreSQL với Rails và tôi thường xuất dữ liệu từ sản xuất, trong đó cơ sở dữ liệu được gọi là blah_production và nhập nó vào phát triển hoặc dàn dựng với tên blah_development và blah_staging. Trên MySQL, điều này là không quan trọng vì xuất khẩu không có cơ sở dữ liệu ở bất cứ đâu (ngoại trừ một nhận xét có thể), nhưng trên PostgreQuery thì dường như là không thể. Nó là bất khả thi?
Tôi hiện đang bán phá giá cơ sở dữ liệu theo cách này:
pg_dump blah > blah.dump
Tôi không sử dụng các tùy chọn -c hoặc -C. Bãi chứa đó chứa các câu lệnh như:
COMMENT ON DATABASE blah IS 'blah';
ALTER TABLE public.checks OWNER TO blah;
ALTER TABLE public.users OWNER TO blah;
Khi tôi cố gắng nhập với
psql blah_devel < blah.dump
tôi có
WARNING: database "blah" does not exist
ERROR: role "blah" does not exist
Có lẽ vấn đề không thực sự là cơ sở dữ liệu mà là vai trò?
Nếu tôi đổ nó theo cách này:
pg_dump --format=c blah > blah.dump
và cố gắng nhập nó theo cách này:
pg_restore -d blah_devel < tmp/blah.psql
Tôi nhận được những lỗi này:
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
Có ý kiến gì không?
Tôi đã thấy có một số người sử dụng các tập lệnh sed để sửa đổi kết xuất. Tôi muốn tránh giải pháp đó nhưng nếu không có cách nào khác tôi sẽ dùng nó. Có ai đã viết một tập lệnh để thay đổi tên cơ sở dữ liệu của bãi chứa để đảm bảo không có dữ liệu nào bị thay đổi không?