postgres pg_dump ejemplos custom consola bak postgresql plpgsql database-restore

pg_dump - Error pg_restore de PostgreSQL 9.1 con respecto a PLPGSQL



restore database pg_dump (5)

¿Estás cargando en un DB que fue creado por un usuario diferente? Si es posible, intente restaurar usando el mismo usuario que creó el DB y sus objetos existentes.

Estoy usando Postgres para un proyecto django y actualmente estoy implementando un sistema de copia de seguridad / restauración de base de datos que tan simple como sea posible realiza un pg_dump cuando el usuario hace clic en la copia de seguridad y luego pg_restaura cuando hacen clic en restaurar copia de seguridad.

Todo parece estar bien y dandy hasta que realmente intente realizar el pg_restore, momento en el cual se produce este error:

pg_restore: [archiver (db)] Error de la entrada TOC 3206; 0 0 COMENTAR EXTENSIÓN plpgsql pg_restore: [archiver (db)] no pudo ejecutar la consulta: ERROR: debe ser el propietario de la extensión plpgsql El comando era: COMENTARIO SOBRE LA EXTENSIÓN plpgsql ES ''PL / pgSQL procedural language'';

He investigado qué es plpgsql, y entiendo eso, y con respecto al error, intenté configurar manualmente el "propietario de la extensión" para el usuario que ejecuta el script y es dueño de la base de datos, pero eso no cambió nada, es realmente molesto desde su error en un intento de establecer un comentario de todas las cosas

Todo esto es creado automáticamente por pg_dump, por lo que la línea de comentario no se puede eliminar y no hay indicadores para deshabilitar los comentarios (que yo sepa), así que estoy realmente atascado en cuanto a cómo resolver este problema.


Encontré la siguiente solución en esta página:

http://archives.postgresql.org/pgsql-general/2011-10/msg00826.php

La idea es usar pg_restore -l para listar el contenido del archivo, grep la extensión que el usuario no tiene permiso para restaurar, y usar pg_restore -L para usar esta lista elided al restaurar.

Por ejemplo:

pg_restore -l ~/database.dump | grep -v "EXTENSION - plpgsql" > ~/restore_elements pg_restore -L ~/restore_elements ~/database.dump


Funciona para mí después de este comando -

Deepak@deepak:~$ sudo -i -u postgres postgres@deepak:~$ psql psql (9.3.5) Type "help" for help. postgres=# GRANT ALL PRIVILEGES ON DATABASE database_name TO user; postgres=# GRANT


Parece que pg_restore intenta restaurar algunos datos adicionales que no le pertenecen. Intente agregar -n public opción -n public a su línea de comando pg_restore. Le dirá a pg_restore restaurar solo los contenidos del esquema público. Tu línea de comando debería verse como

pg_restore -U username -c -n public -d database_name


Si es posible, te recomiendo que elimines el comentario que no se restaura antes de crear ningún vuelco.

Puedes hacerlo así:

COMMENT ON EXTENSION plpgsql IS null;

Si no desea hacer esto para cada base de datos recién creada, elimine el comentario de la base de datos llamado template1 ( CREATE DATABASE… copia esta base de datos).

Los volcados creados después de eso deberían restaurarse sin errores.