Postgres Veritabanı için temiz, sahipsiz bir yedeği komutla attım
pg_dump sample_database -O -c -U
Daha sonra veritabanını geri yüklediğimde
psql -d sample_database -U app_name
Ancak, verileri geri yüklememi engelleyen birkaç hatayla karşılaştım:
ERROR: must be owner of extension plpgsql
ERROR: must be owner of schema public
ERROR: schema "public" already exists
ERROR: must be owner of schema public
CREATE EXTENSION
ERROR: must be owner of extension plpgsql
SQL'in pg_dump
ürettiği düz metinleri araştırdım ve SQL içerdiğini buldum
CREATE SCHEMA public;
COMMENT ON SCHEMA public IS 'standard public schema';
CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog;
COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language';
Sanırım nedenleri, kullanıcının şemayı app_name
değiştirme ayrıcalıklarına sahip olmaması public
ve plpgsql
.
Bu sorunu nasıl çözebilirim?
plpgsql
,DROP EXTENSION plpgsql
senden öncepg_dump
. Bu, uygulamanızı süper kullanıcı yapmaktan daha güvenlidir ve hataları (--single-transaction
veya kullanırsanız bombaları) görmezden gelmekten daha kullanışlıdır-v ON_ERROR_STOP=1
. Bu bilinen bir sorundur [Postgres geliştiricileri tarafından ayrıntılı olarak tartışılmıştır | postgresql.org/message-id/… ancak 9.3'ten itibaren düzeltilmedi.