Saya telah membuang cadangan pemilik yang bersih dan tidak ada untuk Postgres Database dengan perintah
pg_dump sample_database -O -c -U
Nanti saat saya restore database dengan
psql -d sample_database -U app_name
Namun, saya mengalami beberapa kesalahan yang membuat saya tidak dapat memulihkan data:
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
Saya menggali ke dalam pg_dump
menghasilkan SQL teks biasa dan saya menemukan itu berisi SQL
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';
Saya pikir penyebabnya adalah pengguna app_name
tidak memiliki hak istimewa untuk mengubah public
skema dan plpgsql
.
Bagaimana saya bisa mengatasi masalah ini?
plpgsql
, makaDROP EXTENSION plpgsql
sebelum Andapg_dump
. Ini lebih aman daripada menjadikan aplikasi Anda pengguna super, dan lebih nyaman daripada mengabaikan kesalahan (yang gagal jika Anda menggunakan--single-transaction
atau-v ON_ERROR_STOP=1
). Ini adalah masalah yang diketahui, [dibahas panjang lebar oleh para pengembang Postgres | postgresql.org/message-id/… tetapi tidak diperbaiki pada 9.3.