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: source database "originaldb" is being accessed by other users
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();
Servers
-> (mi servidor) ->Databases
, hacer clic con el botón derecho en Bases de datos y seleccionar "Nueva base de datos". Una de las opciones es la plantilla, y el SQL utilizado para crear la base de datos es equivalente. Es por lo tanto más rápido que un dump / restore en el mismo servidor.Una versión de línea de comandos de la respuesta de Bell :
Esto debe ejecutarse bajo los privilegios del maestro de la base de datos, generalmente postgres.
fuente
createdb: database creation failed: ERROR: source database "conf" is being accessed by other users
si intenta hacerlo en una base de datos de producción y, como se esperaba, no desea cerrarlo para crear una copia.Para clonar una base de datos existente con postgres, puede hacerlo
IT matará toda la conexión a la fuente db evitando el error
fuente
procpid
conpid
para que esto funcioneEn el entorno de producción, donde la base de datos original está bajo tráfico, simplemente estoy usando:
fuente
pg_dump -s
? postgresql.org/docs/current/static/app-pgdump.html$ createdb newdb
No sé acerca de 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 hacerpara restaurar todas las tablas y sus datos y todos los privilegios de acceso.
fuente
pg_dump -U postgres sourcedb | psql -U postgres newdb
aunque la eficacia de esta técnica puede ser cuestionable (ya que probablemente termine cambiando de contexto entre lecturas y escrituras)ssh dbserver pg_dump DBNAME | psql NEWDB
... opg_dump DBNAME | ssh otherserver pgsql NEWDB
... Los permisos y la autenticación, por supuesto, deben manejarse de la forma que desee.Primero,
sudo
como usuario de la base de datos:Vaya a la línea de comando PostgreSQL:
Cree la nueva base de datos, otorgue los derechos y salga:
Copie la estructura y los datos de la base de datos anterior a la nueva:
fuente
\l+
. ¿Por qué la diferencia de tamaño?Uní 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 incluidos antes
nohup
para mover la salida a un archivo y protegerlo de la desconexión de un servidor ):nohup pg_dump exampledb > example-01.sql
createdb -O postgres exampledbclone_01
nohup psql exampledbclone_01 < example-01.sql
fuente
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:
fuente
¿Cuál es la forma correcta de copiar toda la base de datos (su estructura y datos) a una nueva en pgAdmin?
Responder:
Tratado y probado.
fuente
De la documentación , no se recomienda usar
createdb
oCREATE DATABASE
con plantillas:pg_dump
opg_dumpall
es una buena manera de copiar la base de datos Y TODOS LOS DATOS. Si está utilizando una GUI como pgAdmin, estos comandos se invocan detrás de escena cuando ejecuta un comando de respaldo. La copia a una nueva base de datos se realiza en dos fases: copia de seguridad y restauraciónpg_dumpall
guarda todas las bases de datos en el clúster PostgreSQL. La desventaja de este enfoque es que terminas con un archivo de texto potencialmente muy grande lleno de SQL requerido para crear la base de datos y completar los datos. La ventaja de este enfoque es que obtiene todos los roles (permisos) para el clúster de forma gratuita. Para volcar todas las bases de datos, haga esto desde la cuenta de superusuarioy para restaurar
pg_dump
tiene algunas opciones de compresión que te dan archivos mucho más pequeños. Tengo una base de datos de producción que respaldo dos veces al día con un trabajo cron usandodonde
compress
está el nivel de compresión (0 a 9) ycreate
le dicepg_dump
que agregue comandos para crear la base de datos. Restaurar (o mover al nuevo clúster) usandodonde newdb es el nombre de la base de datos que desea usar.
Otras cosas para pensar
PostgreSQL usa ROLES para administrar los permisos. Estos no son copiados por
pg_dump
. Además, no hemos tratado la configuración en postgresql.conf y pg_hba.conf (si está moviendo la base de datos a otro servidor). Tendrás que descubrir la configuración de conf por tu cuenta. Pero hay un truco que acabo de descubrir para respaldar roles. Los roles se administran a nivel de clúster y puede solicitarpg_dumpall
una copia de seguridad solo de los roles con el--roles-only
interruptor de línea de comando.fuente
PostgreSQL 9.1.2:
fuente
CREATE DATABASE newdb WITH TEMPLATE originaldb OWNER dbuser;
un resultado y requiere que la base de datos original esté inactiva (sin conexiones con acceso de escritura) y que se eviten las conexiones nuevas a la base de datos original mientras la copia está en proceso. Si estás contento con eso, esto funciona.Para aquellos que todavía están interesados, he creado un script bash que hace (más o menos) lo que el autor quería. Tuve que hacer una copia diaria de la base de datos de negocios en un sistema de producción, este script parece hacer el truco. Recuerde cambiar el nombre de la base de datos / usuario / valores pw.
fuente
Para crear un volcado de base de datos
Para volver a volcar la base de datos
fuente
Aquí está todo el proceso de crear una copia sobre una base de datos utilizando solo la GUI pgadmin4 (a través de copia de seguridad y restauración)
Postgres viene con Pgadmin4. Si usa macOS, puede presionar
CMD
+SPACE
y escribirpgadmin4
para ejecutarlo. Esto abrirá una pestaña del navegador en Chrome.Pasos para copiar
1. Crear la copia de seguridad
Haga esto haciendo clic derecho en la base de datos -> "copia de seguridad"
2. Déle un nombre al archivo.
Al igual
test12345
. Haga clic en copia de seguridad. Esto crea un volcado de archivo binario, no está en un.sql
formato3. Vea dónde se descargó
Debería haber una ventana emergente en la parte inferior derecha de la pantalla. Haga clic en la página "más detalles" para ver dónde se descargó su copia de seguridad
4. Encuentre la ubicación del archivo descargado
En este caso, es
/users/vincenttang
5. Restaurar la copia de seguridad de pgadmin
Suponiendo que realizó los pasos 1 a 4 correctamente, tendrá un archivo binario de restauración. Puede llegar un momento en que su compañero de trabajo quiera usar su archivo de restauración en su máquina local. Que dicha persona vaya a pgadmin y restaure
Haga esto haciendo clic derecho en la base de datos -> "restaurar"
6. Seleccione el buscador de archivos
Asegúrese de seleccionar la ubicación del archivo manualmente, NO arrastre y suelte un archivo en los campos del cargador en pgadmin. Porque te encontrarás con permisos de error. En su lugar, busque el archivo que acaba de crear:
7. Encuentra dicho archivo
Puede que tenga que cambiar el filtro en la parte inferior derecha a "Todos los archivos". Busque el archivo a partir de ese momento, desde el paso 4. Ahora presione el botón "Seleccionar" en la esquina inferior derecha para confirmar
8. Restaurar dicho archivo
Verá esta página nuevamente, con la ubicación del archivo seleccionado. Sigue adelante y restauralo
9. Éxito
Si todo está bien, la parte inferior derecha debería mostrar un indicador que muestra una restauración exitosa. Puede navegar a sus tablas para ver si los datos se han restaurado correctamente en cada tabla.
10. Si no tuvo éxito:
Si el paso 9 falla, intente eliminar su antiguo esquema público en su base de datos. Vaya a "Herramienta de consulta"
Ejecute este bloque de código:
Ahora intente los pasos 5 a 9 nuevamente, debería funcionar
EDITAR - Algunas notas adicionales. Actualice PGADMIN4 si obtiene un error durante la carga con algo similar a "versión no compatible del encabezado 1.14 del archivador" durante la restauración
fuente
Si la base de datos tiene conexiones abiertas, este script puede ayudar. Lo uso para crear una base de datos de prueba a partir de una copia de seguridad de la base de datos de producción en vivo todas las noches. Esto supone que tiene un archivo de copia de seguridad .SQL de la base de datos de producción (lo hago dentro de webmin).
fuente
Con pgAdmin, desconecte la base de datos que desea usar como plantilla. Luego lo selecciona como plantilla para crear la nueva base de datos, esto evita obtener el error ya en uso.
fuente
Si desea copiar todo el esquema, puede hacer un pg_dump con el siguiente comando:
pg_dump -h database.host.com -d database_name -n schema_name -U database_user --password
Y cuando desee importar ese volcado, puede usar:
psql "host=database.host.com user=database_user password=database_password dbname=database_name options=--search_path=schema_name" -f sql_dump_to_import.sql
Más información sobre las cadenas de conexión: https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNSTRING
O simplemente combinándolo en un revestimiento:
fuente
Desconecte la base de datos "con plantilla" que desea usar como plantilla.
Ejecute 2 consultas como a continuación
(La instrucción SQL anterior terminará todas las sesiones activas con TemplateDB y ahora puede seleccionarla como plantilla para crear la nueva base de datos TargetDB, esto evita obtener el error ya en uso).
fuente
Prueba esto:
gl XD
fuente