Saltar al contenido

Cómo duplicar esquemas en PostgreSQL

Solución:

Probablemente pueda hacerlo desde la línea de comandos sin usar archivos:

pg_dump -U user --schema="fromschema" database | sed 's/fromschmea/toschema/g' | psql -U user -d database

Nota que esto busca y reemplaza todas las apariciones de la cadena que es su nombre de esquema, por lo que puede afectar sus datos.

yo usaría pg_dump para volcar el esquema sin datos:

-s
--schema-only

Volcar solo las definiciones de objeto (esquema), no los datos.

Esta opción es la inversa de --data-only. Es similar, pero por razones históricas no idénticas a, especificar --section=pre-data --section=post-data.

(No confunda esto con el --schema opción, que utiliza la palabra “esquema” en un significado diferente).

Para excluir datos de tabla solo para un subconjunto de tablas en la base de datos, consulte --exclude-table-data.

pg_dump $DB -p $PORT -n $SCHEMA -s -f filename.pgsql

Luego cambie el nombre del esquema en el volcado (buscar y reemplazar) y restaure con psql.

psql $DB -f filename.pgsql

Restricciones de clave externa tablas de referencia en otro los esquemas se copian para apuntar al mismo esquema.
Referencias a tablas dentro del mismo esquema apunta a las tablas respectivas dentro del esquema copiado.

Compartiré una solución para mi problema que fue la misma con una pequeña adición. Necesitaba clonar un esquema, crear un nuevo usuario de base de datos y asignar la propiedad de todos los objetos en el nuevo esquema a ese usuario.

Para el siguiente ejemplo, supongamos que el esquema de referencia se llama ref_schema y el esquema de destino nuevo_esquema. El esquema de referencia y todos los objetos que contiene son propiedad de un usuario llamado ref_user.

1. volcar el esquema de referencia con pg_dump:

pg_dump -n ref_schema -f dump.sql database_name

2. cree un nuevo usuario de base de datos con el nombre Nuevo Usuario:

CREATE USER new_user

3. cambiar el nombre del esquema ref_schema para nuevo_esquema:

ALTER SCHEMA ref_schema RENAME TO new_schema

4. cambiar la propiedad de todos los objetos en el esquema renombrado al nuevo usuario

REASSIGN OWNED BY ref_user TO new_user

5. restaurar el esquema de referencia original del volcado

psql -f dump.sql database_name

Espero que alguien lo encuentre útil.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *