Cómo puedo copiar mi public
esquema en la misma base de datos con estructura de tabla completa, datos, funciones, fk, pk y etc.
Mi versión de Postgres es 8.4
PS. Necesito copiar el esquema NO la base de datos
Cómo puedo copiar mi public
esquema en la misma base de datos con estructura de tabla completa, datos, funciones, fk, pk y etc.
Mi versión de Postgres es 8.4
PS. Necesito copiar el esquema NO la base de datos
Respuestas:
No hay una manera simple de hacer esto en pg_dump / pg_restore en sí. Puede intentar lo siguiente si puede eliminar la base de datos temporalmente.
pg_dump -n my_schema -f '/path/to/file.pgsql' my_db
. Más fácil como superusuario ( postgres
) con peer
autorización sin pw en pg_haba.conf
. Restauración después de haber cambiado el nombre del esquema original: psql my_db -f '/path/to/file.pgsql'
. Si tiene un volcado de SQL simple, no lo necesita pg_restore
.
pg_dump -n schema_name > dump.sql vi dump.sql # edit the schema name psql: psql -f dump.sql
Si está atrapado con php, use cualquiera de los tics posteriores
`/usr/bin/pg_dump-n myschema mydb -U username > /tmp/dump.sql`
o el comando exec (). Para el cambio, puede usar sed de la misma manera.
Aquí hay 6 caracteres más
public
).
Usando pgAdmin puedes hacer lo siguiente. Es bastante manual, pero podría ser todo lo que necesitas. Un enfoque basado en guiones sería mucho más deseable. No estoy seguro de qué tan bien funcionará esto si no tiene acceso de administrador y si su base de datos es grande, pero debería funcionar bien en una base de datos de desarrollo que solo tiene en su computadora local.
Haga clic con el botón derecho en el nombre del esquema que desea copiar y haga clic en Copia de seguridad. (Puede profundizar más que esto y elegir simplemente hacer una copia de seguridad de la estructura en lugar de ambas).
Dé un nombre al archivo de copia de seguridad y también elija un formato. (Usualmente uso alquitrán)
Haz clic en Copia de seguridad.
Haga clic con el botón derecho en el esquema del que realizó la copia de seguridad y haga clic en propiedades y cámbiele el nombre a algo más temporalmente. (por ejemplo, temprename )
Haga clic en la raíz de los esquemas y haga clic con el botón derecho en el navegador de objetos y haga clic en crear nuevo esquema y déle un nombre público . Este será el esquema en el que está copiando desde su copia de seguridad.
Haga clic con el botón derecho en el nuevo esquema público del paso 5. y haga clic en restaurar. Restaurar desde el archivo de copia de seguridad en el paso 3.
Cambie el nombre del nuevo esquema público a un nombre diferente (por ejemplo, newschema ).
Cambiar nombre de esquema temprename cambio del paso 4 de nuevo al nombre original.
Podrías usar
CREATE DATABASE new_db TEMPLATE = old_db;
Luego suelte todos los esquemas que no necesita:
DROP SCHEMA public CASCADE;
DROP SCHEMA other CASCADE;
El único inconveniente es que todas las conexiones a old_db deben determinarse antes de que pueda crear la copia (por lo que el proceso que ejecuta la CREATE DATABASE
instrucción debe conectarse, por ejemplo, a template1)
Si esa no es una opción, pg_dump / pg_restore es la única forma de hacerlo.
expandiendo la respuesta del usuario1113185 , aquí hay un flujo de trabajo completo usando psql / pg_dump.
Lo siguiente exporta todos los objetos old_schema
y los importa a un nuevo new_schema
esquema, como user
, en la dbname
base de datos:
psql -U user -d dbname -c 'ALTER SCHEMA old_schema RENAME TO new_schema'
pg_dump -U user -n new_schema -f new_schema.sql dbname
psql -U user -d dbname -c 'ALTER SCHEMA new_schema RENAME TO old_schema'
psql -U user -d dbname -c 'CREATE SCHEMA new_schema'
psql -U user -q -d dbname -f new_schema.sql
rm new_schema.sql
public
?