Esta é a versão 9.3, mas eu me lembro de coisas semelhantes acontecendo desde a 7.x. Então, crio o banco de dados e instalo a extensão plpgsql nele. Posteriormente, crio um pg_dump e antes de restaurá-lo no databse, verifique se ele também possui a extensão plpgsql. Então, ao restaurar isso acontece:
pg_restore: creating EXTENSION plpgsql
pg_restore: creating COMMENT EXTENSION plpgsql
pg_restore: [archiver (db)] Error while PROCESSING TOC:
pg_restore: [archiver (db)] Error from TOC entry 2053; 0 0 COMMENT EXTENSION plpgsql
pg_restore: [archiver (db)] could not execute query: ERROR: must be owner of extension plpgsql
Command was: COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language';
Estou criando um monte de scripts e é muito importante para mim que o pg_restore retorne 0, então o fato de eu simplesmente ignorar isso não está adiantando. O que me intriga é que o IIRC eu preciso criar extensão como usuário mestre do postgres, então não tenho idéia do porquê de todo esse material de EXTENSION acabar no meu lixão. Afinal, eu não sou dono do idioma / extensão?
De qualquer forma, eu ficaria grato por qualquer sugestão de como se livrar disso. Observe que estou ciente de como as opções -l / -L funcionam. No entanto, isso parece ser um esforço demais para corrigir apenas um comentário de extensão simples.
fonte
Respostas:
Para quem procura uma solução alternativa, a limitação
pg_restore
de um esquema específico me ajudou a contornar esse bug. Consulte /programming//a/11776053/11819fonte
-n
flagVocê pode fazer
é o que eu uso para importar para o google cloud sql com o postgres.
edit: adicionou o cursor de início de linha para não excluir linhas que contenham esse texto literal.
fonte
pg_dump | sed 's/DROP EXTENSION/-- DROP EXTENSION/g' | sed 's/CREATE EXTENSION/-- CREATE EXTENSION/g' | sed 's/COMMENT ON EXTENSION/-- COMMENT ON EXTENSION/g'
Use o
-L
sinalizador com pg_restore após fazer um despejo em um formato de arquivo personalizado.Referência: pg_restore (PostgreSQL Documentation 9.3)
Aqui você pode ver que o inverso é verdadeiro:
fonte
Para exportar apenas o esquema sem outros objetos do banco de dados, você pode especificar o nome do esquema usando o parâmetro
--schema
fonte