Este artículo explica cómo reinicializar una base de datos PostgreSQL desde un dump (volcado o backup) en texto plano sin perder la configuración de roles, privilegios y permisos sobre la misma.



Para comenzar, cambiar al usuario "postgres" y abrir la terminal interactiva de PosgreSQL psql:

postgres@dbsrv:~$ psql

El primer paso consiste en listar la base de datos a vaciar junto con sus privilegios de acceso utilizando el comando \z:

postgres=# \l webappdb02;
                                    List of databases
    Name    |  Owner   | Encoding |   Collate   |    Ctype    |    Access privileges     
------------+----------+----------+-------------+-------------+--------------------------
 webappdb02 | postgres | UTF8     | es_AR.UTF-8 | es_AR.UTF-8 | =Tc/postgres            +
            |          |          |             |             | postgres=CTc/postgres   +
            |          |          |             |             | usr_admin=c/postgres
(1 row)

Guardar la salida para no perder la configuración de permisos. Luego borrar y crear la base de datos nuevamente:

postgres=# drop database webappdb02;
postgres=# create database webappdb02;

En este punto tenemos una base de datos totalmente vacía. Ahora es necesario replicar la configuración de privilegios de accesos según la salida anterior. El usuario "postgres" tenía privilegios CTc (create, temporary y connect):

postgres=# grant create,temporary,connect on database webappdb02 to postgres;

Y el usuario "usr_admin" sólo connect (c):

postgres=# grant connect on database webappdb02 to usr_admin;

Repetir el procedimiento con cada usuario listado en la columna "Access privileges" de la salida inicial. Al finalizar, cerrar la sesión en la base de datos:

postgres=# \q

Finalmente es posible restaurar la base de datos desde el dump (archivo webappdb02.sql) en texto plano:

postgres@dbsrv:~$ psql -h localhost -p 5432 -U postgres -d webappdb02 < webappdb02.sql > webappdb02.salida 2> webappdb02.errores

Se asume que los privilegios sobre las tablas son provistos por el propio dump, tal como ocurre por defecto cuando se hace un dump con la herramienta pg_dump.


Tal vez pueda interesarte


Compartí este artículo