Я скинув чисту, без резервної копії власника для Postgres Database з командою
pg_dump sample_database -O -c -U
Пізніше, коли я відновляю базу даних з
psql -d sample_database -U app_name
Однак я зіткнувся з декількома помилками, які не дозволяють мені відновити дані:
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
Я перекопався до простого тексту pg_dump
генерує SQL і виявив, що він містить 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';
Я думаю, що причини полягають у тому, що користувач app_name
не має привілеїв змінювати public
схему та plpgsql
.
Як я міг вирішити це питання?
plpgsql
, тоDROP EXTENSION plpgsql
перед вамиpg_dump
. Це безпечніше, ніж зробити ваш додаток супер користувачем, і зручніше, ніж ігнорувати помилки (які бомби, якщо ви використовуєте--single-transaction
чи-v ON_ERROR_STOP=1
). Це відома проблема, [яку детально обговорювали розробники Postgres | postgresql.org/message-id/…, але не встановлено станом на 9.3.