Come duplicare il database in postgresql?


17

Devo duplicare il database esistente incluso il suo schema e la sua struttura su un altro nuovo database. Ne ho bisogno nell'ambiente di comando della shell e non in pgadmin. Per favore, mi aiuti gentilmente.

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

il mio utente è "postgres"

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

Risposte:


33

Se vuoi duplicarlo all'interno della stessa installazione di PostgreSQL e non hai utenti attivamente connessi, c'è un comodo collegamento:

CREATE DATABASE my_new_database TEMPLATE my_old_database;

o dalla shell

createdb -T my_old_database my_new_database;

In caso contrario, sarà necessario l'uso pg_dump, createdbe pg_restore, ad esempio,

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

Se stai usando nohupcosì il comando non muore se perdi la tua sessione ssh, considera screeninvece l' uso .


1
FantasticoCREATE DATABASE my_new_database TEMPLATE my_old_database;
anjaneyulubatta505

1
Brillante! Non solo copia la struttura, ma anche i dati!
Foton

@Foton Sì, anche se puoi usare pg_dumpe pg_restorese vuoi essere più selettivo e scaricare (diciamo) solo la struttura.
Craig Ringer

0

Postgres consente l'uso di qualsiasi database esistente sul server come modello durante la creazione di un nuovo database. Non sono sicuro che pgAdmin ti offra l'opzione nella finestra di dialogo di creazione del database, ma in caso contrario dovresti essere in grado di eseguire quanto segue in una finestra di query:

CREATE DATABASE newdb WITH TEMPLATE originaldb OWNER dbuser;

Tuttavia, potresti ottenere:

ERRORE: il database di origine "originaldb" è accessibile da altri utenti

Per disconnettere tutti gli altri utenti dal database, è possibile utilizzare questa query:

SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity 
WHERE pg_stat_activity.datname = 'originaldb' AND pid <> pg_backend_pid();
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.