Despejei um backup limpo e sem proprietário do banco de dados Postgres com o comando
pg_dump sample_database -O -c -U
Mais tarde, quando restauro o banco de dados com
psql -d sample_database -U app_name
No entanto, encontrei vários erros que me impedem de restaurar os dados:
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
Pesquisei no SQL de texto simples pg_dump
gerado e descobri que contém 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';
Acho que as causas são que o usuário app_name
não tem privilégios para alterar o public
esquema e plpgsql
.
Como posso resolver esse problema?
plpgsql
,DROP EXTENSION plpgsql
antes de vocêpg_dump
. Isso é mais seguro do que tornar seu aplicativo um superusuário e é mais conveniente do que ignorar erros (que detonam se você usar--single-transaction
ou-v ON_ERROR_STOP=1
). Este é um problema conhecido, [discutido longamente pelos desenvolvedores do Postgres | postgresql.org/message-id/… mas não corrigido a partir de 9.3.