¿Cómo duplicar la base de datos en postgresql?

17

Necesito duplicar la base de datos existente, incluido su esquema y estructura, en otra nueva base de datos. Necesito esto en el entorno de comando de shell y no en pgadmin. Por favor amablemente ayúdame.

nohup pg_dump exampledb > example-01.sql
createdb -O postgres exampledbclone_01

mi usuario es "postgres"

nohup psql exampledbclone_01 < example-01.sql
$ pg_dump mydb > db.sql
$ psql -d newdb -f db.sql
Karunya Suresh
fuente

Respuestas:

33

Si desea duplicarlo dentro de la misma instalación de PostgreSQL y no tiene usuarios conectados activamente, hay un atajo útil:

CREATE DATABASE my_new_database TEMPLATE my_old_database;

o de la cáscara

createdb -T my_old_database my_new_database;

De lo contrario, deberá usar pg_dump, createdby pg_restore, por ejemplo

pg_dump -Fc -f olddb.pgdump -d olddb &&\
createdb newdb &&\
pg_restore -d newdb olddb.pgdump

Si está usando nohuppara que el comando no muera si pierde su sesión ssh, considere usar en su screenlugar.

Craig Ringer
fuente
1
ImpresionanteCREATE DATABASE my_new_database TEMPLATE my_old_database;
anjaneyulubatta505
1
¡Brillante! ¡No solo copia la estructura, sino también los datos!
Foton
@Foton Yep, aunque puedes usar pg_dumpy pg_restoresi quieres ser más selectivo y volcar (por ejemplo) solo la estructura.
Craig Ringer
0

Postgres permite el uso de cualquier base de datos existente en el servidor como plantilla al crear una nueva base de datos. No estoy seguro de si pgAdmin le da la opción en el cuadro de diálogo crear base de datos, pero debería poder ejecutar lo siguiente en una ventana de consulta si no es así:

CREATE DATABASE newdb WITH TEMPLATE originaldb OWNER dbuser;

Aún así, puede obtener:

ERROR: otros usuarios acceden a la base de datos de origen "originaldb"

Para desconectar a todos los demás usuarios de la base de datos, puede usar esta consulta:

SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity 
WHERE pg_stat_activity.datname = 'originaldb' AND pid <> pg_backend_pid();
usuario200679
fuente