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
postgresql
sigra
fuente
fuente
public
?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.
fuente
pg_dump -n my_schema -f '/path/to/file.pgsql' my_db
. Más fácil como superusuario (postgres
) conpeer
autorización sin pw enpg_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 necesitapg_restore
.Si está atrapado con php, use cualquiera de los tics posteriores
o el comando exec (). Para el cambio, puede usar sed de la misma manera.
Aquí hay 6 caracteres más
fuente
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.
fuente
Podrías usar
Luego suelte todos los esquemas que no necesita:
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.
fuente
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 nuevonew_schema
esquema, comouser
, en ladbname
base de datos:fuente