Pregunta Crear una copia de una base de datos en PostgreSQL


¿Cuál es la forma correcta de copiar toda la base de datos (su estructura y datos) a una nueva en pgAdmin?


583
2018-05-18 07:00


origen


Respuestas:


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 de crear el diálogo de la base de datos, pero debería poder ejecutar lo siguiente en una ventana de consulta si no:

CREATE DATABASE newdb WITH TEMPLATE originaldb OWNER dbuser;

Aún así, puede obtener:

ERROR:  source database "originaldb" is being accessed by other users

Para solucionarlo puedes 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();

900
2018-05-18 07:18



Una versión de línea de comandos de La respuesta de Bell:

createdb -O ownername -T originaldb newdb

Esto debe ejecutarse bajo los privilegios del maestro de la base de datos, generalmente postgres.


255
2017-07-18 22:05



Para clonar una base de datos existente con postgres puedes hacer eso

/* KILL ALL EXISTING CONNECTION FROM ORIGINAL DB (sourcedb)*/
SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity 
WHERE pg_stat_activity.datname = 'SOURCE_DB' AND pid <> pg_backend_pid();

/* CLONE DATABASE TO NEW ONE(TARGET_DB) */
CREATE DATABASE TARGET_DB WITH TEMPLATE SOURCE_DB OWNER USER_DB;

TI matará toda la conexión a la fuente db evitando el error

ERROR:  source database "SOURCE_DB" is being accessed by other users

94
2018-05-12 14:33



No sé sobre pgAdmin, pero pgdump le da un volcado de la base de datos en SQL. Solo necesita crear una base de datos con el mismo nombre y hacer

psql mydatabase < my dump

para restaurar todas las tablas y sus datos y todos los privilegios de acceso.


46
2018-05-18 07:05



En el entorno de producción, donde la base de datos original está bajo tráfico, simplemente estoy usando:

pg_dump production-db | psql test-db

46
2017-11-12 21:47



Formé este enfoque junto con los ejemplos de arriba. Estoy trabajando en un servidor "bajo carga" y recibí el error cuando intenté el enfoque de @zbyszek. También buscaba una solución de "solo línea de comando".

createdb: database creation failed: ERROR: source database "exampledb" is being accessed by other users.

Esto es lo que funcionó para mí (Comandos precedidos de nohup para mover la salida a un archivo y protegerlo de una desconexión del servidor)

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

mi usuario es "postgres"


13
2018-06-12 17:21



Primero, sudo como el usuario de la base de datos:

sudo su postgres

Ir a la línea de comandos de PostgreSQL:

psql

Cree la nueva base de datos, otorgue los derechos y salga:

CREATE DATABASE new_database_name;
GRANT ALL PRIVILEGES ON DATABASE new_database_name TO my_user;
\d

Copie la estructura y los datos de la base de datos anterior a la nueva:

pg_dump old_database_name | psql new_database_name

13
2018-03-23 15:26



En pgAdmin puede hacer una copia de seguridad desde su base de datos original, y luego simplemente crear una nueva base de datos y restaurar desde la copia de seguridad recién creada:

  1. Haga clic derecho en la base de datos de origen, Copia de seguridad ... y volcar en un archivo.
  2. Haga clic derecho, Nuevo objeto, Nueva base de datos ... y nombre el destino.
  3. Haga clic con el botón derecho en la nueva base de datos, Restaurar ... y seleccione su archivo.

10
2017-08-14 00:24