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_dumpgerado 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_namenão tem privilégios para alterar o publicesquema e plpgsql.
Como posso resolver esse problema?
plpgsql,DROP EXTENSION plpgsqlantes 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-transactionou-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.