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.