PostgreSQL veritabanını dışa aktarmanın ve daha sonra başka bir adla içe aktarmanın bir yolu var mı?
Ben Rails ile PostgreSQL kullanıyorum ve veriyi blah_production adı verilen ve üretimde blah_development ve blah_staging isimleriyle aşamalandıran üretimden veriyi sıklıkla veriyorum. MySQL'de bu, dışa aktarma hiçbir yerde veritabanına sahip olmadığı için önemsizdir (belki bir yorum hariç), ancak PostgreSQL'de bu imkansız gibi görünüyor. İmkansız mı?
Şu anda veritabanını şu şekilde kullanıyorum:
pg_dump blah > blah.dump
-C veya -C seçeneklerini kullanmıyorum. Bu dökümü aşağıdaki gibi ifadeler içeriyor:
COMMENT ON DATABASE blah IS 'blah';
ALTER TABLE public.checks OWNER TO blah;
ALTER TABLE public.users OWNER TO blah;
İle almaya çalıştığımda
psql blah_devel < blah.dump
alırım
WARNING: database "blah" does not exist
ERROR: role "blah" does not exist
Belki de sorun gerçekten veritabanı değil, roldür?
Eğer bu şekilde terk edersem:
pg_dump --format=c blah > blah.dump
ve bu şekilde içe aktarmayı deneyin:
pg_restore -d blah_devel < tmp/blah.psql
Bu hataları alıyorum:
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
Herhangi bir fikir?
Orada çöplüğü değiştirmek için sed scripts kullanan bazı insanlar gördüm. Bu çözümden kaçınmak isterdim, ancak alternatif yoksa, ben alırım. Herhangi bir veride değişiklik olmadığından emin olmak için çöplüğün veritabanı adını değiştirmek için bir senaryo yazan var mı?