Temos um arquivo SQL despejado do PostgreSQL v10 pelo seguinte comando localmente no host:
pg_dump \
"postgres://db_user:db_pass@localhost:5432/database" \
--file "pgsql-dump-v10.sql" \
--format=p --no-owner --no-privileges
Copiamos o arquivo de despejo para outro PostgreSQL da v16 e importamos os dados chamando o seguinte comando localmente:
psql \
"postgresql://db_user:db_pass@localhost/database" \
--file pgsql-dump-v10.sql
E, aparece a seguinte mensagem de erro:
psql:/xxx/pgsql-dump-v10.sql:30: ERRO: deve ser o proprietário da extensão plpgsql
E o culpado é a Linha 30, pssql-dump-v10.sql
como segue:
COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language';
O erro não parece ser crítico, então chamamos o mesmo pg_dump
comando na instância do PostgreSQL v16 e comparamos os dois dumps como na captura de tela abaixo.
Além disso, ao executar pgsql-dump-v16.sql
no PostgreSQL v16, não há nenhum erro.
Nossa pergunta:
Embora não seja crítico, queremos resolver o erro na configuração do comentário da extensão. E agradecemos muito quaisquer dicas e sugestões.
Além disso, se o erro realmente tiver mais impacto do que vimos, por favor, nos lembre também. Estamos nos preparando para uma operação de produção.
Obrigado.
O
plpgsql
módulo foi instalado por padrão há muito tempo, então seu proprietário é o superusuário que criou a instância do Postgres. Na sua instância v16 de destino, ele já existe. Se odb_user
que você especificar ao restaurar o dump não for o superusuário que criou a instância de destino, ele obviamente falhará ao atualizar o comentário na extensão que ele não possui.Você pode fazer qualquer uma destas coisas, sem nenhuma ordem específica:
O comportamento do pg_dump mudou com a versão 14 :
Versões mais antigas despejam todas as extensões no backup, já que a versão 14 por padrão todas as extensões não-sistema no banco de dados de destino serão despejadas. Você pode sobrescrever isso usando -e ou --extension=