Я сбросил чистую резервную копию базы данных Postgres без владельца с помощью команды
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.