Як дублювати базу даних у postgresql?


17

Мені потрібно дублювати існуючу базу даних, включаючи її схему та структуру, до іншої нової бази даних. Мені це потрібно в командному середовищі оболонки, а не в pgadmin. Будь ласка, допоможіть мені.

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

мій користувач - "postgres"

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

Відповіді:


37

Якщо ви хочете дублювати його в одній і тій же установці PostgreSQL і у вас немає активних підключених користувачів, є зручний ярлик:

CREATE DATABASE my_new_database TEMPLATE my_old_database;

або з оболонки

createdb -T my_old_database my_new_database;

В іншому випадку вам потрібно буде використовувати pg_dump, createdbі pg_restore, наприклад,

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

Якщо ви використовуєте, nohupщоб команда не загинула, якщо ви втратите свій ssh ​​сеанс, подумайте про її використання screen.


1
AwesomeCREATE DATABASE my_new_database TEMPLATE my_old_database;
anjaneyulubatta505

1
Блискуче! Це не лише копіює структуру, а й дані!
Фотон

@Foton Yep, хоча ви можете використовувати, pg_dumpі pg_restoreякщо ви хочете бути більш вибірковими і скидати (скажімо) просто структуру.
Крейг Рінгер

1

Postgres дозволяє використовувати будь-яку існуючу базу даних на сервері як шаблон при створенні нової бази даних. Я не впевнений, чи дає вам pgAdmin опцію в діалоговому вікні створення бази даних, але ви повинні мати можливість виконати наступне у вікні запиту, якщо він не:

CREATE DATABASE newdb WITH TEMPLATE originaldb OWNER dbuser;

Тим не менш, ви можете отримати:

ПОМИЛКА: вихідна база даних "originaldb" отримує доступ до інших користувачів

Щоб відключити всіх інших користувачів від бази даних, ви можете використовувати цей запит:

SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity 
WHERE pg_stat_activity.datname = 'originaldb' AND pid <> pg_backend_pid();
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.