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_dumpgenerowane 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_namenie ma uprawnień do zmiany publicschematu i plpgsql.
Jak mogę rozwiązać ten problem?
plpgsql, toDROP EXTENSION plpgsqlprzed 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-transactionlub-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.