it-swarm.com.de

Wie dupliziere ich die Datenbank in postgresql?

Ich muss die vorhandene Datenbank einschließlich ihres Schemas und ihrer Struktur in eine andere neue Datenbank duplizieren. Ich brauche dies in der Shell-Befehlsumgebung und nicht in pgadmin. Bitte helfen Sie mir freundlich.

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

mein Benutzer ist "postgres"

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

Wenn Sie es innerhalb derselben PostgreSQL-Installation duplizieren möchten und keine aktiv verbundenen Benutzer haben, gibt es eine praktische Verknüpfung:

CREATE DATABASE my_new_database TEMPLATE my_old_database;

oder aus der Shell

createdb -T my_old_database my_new_database;

Andernfalls müssen Sie pg_dump, createdb und pg_restore Verwenden, z.

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

Wenn Sie Nohup verwenden, damit der Befehl nicht stirbt, wenn Sie Ihre SSH-Sitzung verlieren, sollten Sie stattdessen screen verwenden.

41
Craig Ringer

Postgres ermöglicht die Verwendung einer vorhandenen Datenbank auf dem Server als Vorlage beim Erstellen einer neuen Datenbank. Ich bin nicht sicher, ob pgAdmin Ihnen die Option zum Erstellen einer Datenbank bietet, aber Sie sollten in der Lage sein, Folgendes in einem Abfragefenster auszuführen, wenn dies nicht der Fall ist:

CREATE DATABASE newdb WITH TEMPLATE originaldb OWNER dbuser;

Dennoch können Sie erhalten:

FEHLER: Auf die Quelldatenbank "originaldb" wird von anderen Benutzern zugegriffen

Um alle anderen Benutzer von der Datenbank zu trennen, können Sie folgende Abfrage verwenden:

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