Zrzuciłem czystą kopię zapasową bazy danych Postgres bez właściciela za pomocą polecenia
pg_dump sample_database -O -c -U
Później, kiedy przywracam bazę danych za pomocą
psql -d sample_database -U app_name
Jednak napotkałem kilka błędów, które uniemożliwiają mi przywrócenie danych:
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
Zagłębiłem się w pg_dump
generowane przez zwykły tekst SQL i stwierdziłem, że zawiera 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';
Myślę, że przyczyną jest to, że użytkownik app_name
nie ma uprawnień do zmiany public
schematu i plpgsql
.
Jak mogę rozwiązać ten problem?
plpgsql
, toDROP EXTENSION plpgsql
przed tobąpg_dump
. Jest to bezpieczniejsze niż uczynienie aplikacji superużytkownikiem i jest wygodniejsze niż ignorowanie błędów (które bombardują, jeśli używasz--single-transaction
lub-v ON_ERROR_STOP=1
). Jest to znany problem, [szczegółowo omówiony przez programistów Postgres | postgresql.org/message-id/ ... ale nie naprawiono od 9.3.