Esto está en 9.3 pero puedo recordar cosas similares sucediendo desde 7.x. Entonces creo una base de datos e instalo la extensión plpgsql en ella. Más tarde creo un pg_dump y antes de restaurarlo en databse me aseguro de que también tenga la extensión plpgsql. Luego, al restaurar esto sucede:
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';
Estoy creando un montón de scripts y es bastante importante para mí que pg_restore devuelva 0, por lo que el hecho de que pueda ignorar esto no está haciendo nada bueno. Lo que me desconcierta es que IIRC necesito crear una extensión como usuario maestro de postgres, por lo que no tengo idea de por qué todas estas cosas de EXTENSIÓN terminan en mi basurero. Después de todo, ¿no soy dueño del idioma / extensión?
De todos modos, agradecería cualquier sugerencia sobre cómo deshacerse de esto. Tenga en cuenta que sé cómo funcionan los modificadores -l / -L. Sin embargo, esto parece ser demasiado esfuerzo para corregir un solo comentario de extensión simple.
fuente
Respuestas:
Para cualquiera que busque una solución alternativa, limitarme
pg_restore
a un esquema específico me ha ayudado a evitar este error. Ver /programming//a/11776053/11819fuente
-n
banderaTu puedes hacer
es lo que uso para importar a google cloud sql con postgres.
editar: se agregó el cursor 'inicio de línea' para no excluir líneas que contienen este texto literal.
fuente
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 el
-L
indicador con pg_restore después de realizar un volcado en un formato de archivo personalizado.Referencia: pg_restore (documentación de PostgreSQL 9.3)
Aquí puedes ver que lo inverso es cierto:
fuente
Para exportar solo el esquema sin ningún otro objeto de la base de datos, puede especificar el nombre del esquema utilizando el parámetro
--schema
fuente