Jak zduplikować bazę danych w postgresql?


17

Muszę zduplikować istniejącą bazę danych, w tym jej schemat i strukturę, do innej nowej bazy danych. Potrzebuję tego w środowisku poleceń powłoki, a nie w pgadmin. Proszę mi pomóc.

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

mój użytkownik to „postgres”

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

Odpowiedzi:


36

Jeśli chcesz powielić go w ramach tej samej instalacji PostgreSQL i nie masz aktywnie podłączonych użytkowników, przydatny jest skrót:

CREATE DATABASE my_new_database TEMPLATE my_old_database;

lub z muszli

createdb -T my_old_database my_new_database;

W przeciwnym razie będziesz musiał użyć pg_dump, createdbi pg_restorenp

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

Jeśli używasz, nohupaby polecenie nie zginęło, jeśli stracisz sesję ssh, rozważ użycie screenzamiast tego.


1
NiesamowiteCREATE DATABASE my_new_database TEMPLATE my_old_database;
anjaneyulubatta505 11.04.19

1
Znakomity! Nie tylko kopiuje strukturę, ale także dane!
Foton

@Foton Tak, chociaż możesz użyć, pg_dumpa pg_restorejeśli chcesz być bardziej selektywny i zrzucić (powiedzmy) tylko strukturę.
Craig Ringer

1

Postgres pozwala na użycie dowolnej istniejącej bazy danych na serwerze jako szablonu podczas tworzenia nowej bazy danych. Nie jestem pewien, czy pgAdmin daje ci opcję w oknie dialogowym tworzenia bazy danych, ale jeśli nie, powinieneś być w stanie wykonać następujące czynności w oknie zapytania:

CREATE DATABASE newdb WITH TEMPLATE originaldb OWNER dbuser;

Mimo to możesz uzyskać:

BŁĄD: inni użytkownicy uzyskują dostęp do źródłowej bazy danych „originaldb”

Aby odłączyć wszystkich innych użytkowników od bazy danych, możesz użyć tego zapytania:

SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity 
WHERE pg_stat_activity.datname = 'originaldb' AND pid <> pg_backend_pid();
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.