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_namedeğiştirme ayrıcalıklarına sahip olmaması publicve plpgsql.
Bu sorunu nasıl çözebilirim?
plpgsql,DROP EXTENSION plpgsqlsenden öncepg_dump. Bu, uygulamanızı süper kullanıcı yapmaktan daha güvenlidir ve hataları (--single-transactionveya 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.