Postgresql veritabanı nasıl çoğaltılır?


18

Şema ve yapısı da dahil olmak üzere mevcut veritabanını başka bir yeni veritabanına çoğaltmak gerekiyor. Kabuk komut ortamında buna ihtiyacım var, pgadmin'de değil. Lütfen bana yardım et.

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

benim kullanıcı "postgres"

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

Yanıtlar:


38

Aynı PostgreSQL kurulumunda çoğaltmak istiyorsanız ve aktif olarak bağlı kullanıcılarınız yoksa kullanışlı bir kısayol var:

CREATE DATABASE my_new_database TEMPLATE my_old_database;

veya kabuktan

createdb -T my_old_database my_new_database;

Aksi takdirde kullanım gerekir pg_dump, createdbve pg_restore, örneğin

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

Bunu kullanıyorsanız nohup, ssh oturumunuzu kaybederseniz komut ölmez, screenbunun yerine kullanmayı düşünün .


1
MüthişCREATE DATABASE my_new_database TEMPLATE my_old_database;
anjaneyulubatta505

1
Parlak! Sadece yapıyı değil, aynı zamanda verileri de kopyalar!
Foton

@Foton Yep, yine de kullanabilirsiniz pg_dumpve pg_restoredaha seçici olmak istiyorsanız ve sadece yapı dökümü (demek).
Craig Ringer

2

Postgres, yeni bir veritabanı oluştururken sunucudaki mevcut herhangi bir veritabanının şablon olarak kullanılmasına izin verir. PgAdmin'in veritabanı oluştur iletişim kutusunda size seçenek verip vermediğinden emin değilim, ancak aşağıdaki durumlarda bir sorgu penceresinde aşağıdakileri çalıştırabilmeniz gerekir:

CREATE DATABASE newdb WITH TEMPLATE originaldb OWNER dbuser;

Yine de şunları alabilirsiniz:

HATA: "originaldb" kaynak veritabanına diğer kullanıcılar tarafından erişiliyor

Diğer tüm kullanıcıların veritabanıyla olan bağlantısını kesmek için şu sorguyu kullanabilirsiniz:

SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity 
WHERE pg_stat_activity.datname = 'originaldb' AND pid <> pg_backend_pid();
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.