PostgreSQL, как создать копию базы данных или схемы? - PullRequest
28 голосов
/ 30 апреля 2009

Есть ли простой способ создать копию базы данных или схемы в PostgreSQL 8.1?

Я тестирую некоторое программное обеспечение, которое выполняет множество обновлений для конкретной схемы в базе данных, и я хотел бы сделать ее копию, чтобы я мог провести некоторые сравнения с оригиналом.

Ответы [ 5 ]

30 голосов
/ 01 мая 2009

Если он на том же сервере, вы просто используете команду CREATE DATABASE с параметром TEMPLATE. Например:

CREATE DATABASE newdb WITH TEMPLATE olddb;
22 голосов
/ 30 апреля 2009

pg_dump с опцией --schema-only.

11 голосов
/ 26 марта 2014

Если вам нужно скопировать схему из локальной базы данных в удаленную базу данных, вы можете использовать один из следующих двух вариантов.

Вариант A

  1. Скопируйте схему из локальной базы данных в файл дампа.

    pg_dump -U postgres -Cs database > dump_file
    
  2. Скопируйте файл дампа с локального сервера на удаленный сервер.

    scp localuser@localhost:dump_file remoteuser@remotehost:dump_file
    
  3. Подключение к удаленному серверу.

    ssh remoteuser@remotehost
    
  4. Скопируйте схему из файла дампа в удаленную базу данных.

    psql -U postgres database < dump_file
    

Вариант B

Скопируйте схему непосредственно из локальной базы данных в удаленную базу данных без использования промежуточного файла.

pg_dump -h localhost -U postgres -Cs database | psql -h remotehost -U postgres database

Это сообщение в блоге может оказаться полезным для вас, если вы хотите узнать больше о вариантах копирования базы данных с использованием pg_dump.

1 голос
/ 23 мая 2019

Это можно сделать, выполнив следующую команду:

CREATE DATABASE [Database to create] WITH TEMPLATE [Database to copy] OWNER [Your username];

После заполнения имен вашей базы данных и вашего имени пользователя будет создана копия указанной базы данных. Это будет работать до тех пор, пока нет других активных подключений к базе данных, которую вы хотите скопировать. Если есть другие активные соединения, вы можете временно разорвать соединения, используя эту команду:

SELECT pg_terminate_backend(pg_stat_activity.pid) 
FROM pg_stat_activity 
WHERE pg_stat_activity.datname = '[Database to copy]' 
AND pid <> pg_backend_pid();

Хорошую статью, которую я написал для Школы данных Chartio, которая более подробно описывает, как это сделать, можно найти здесь: https://dataschool.com/learn/how-to-create-a-copy-of-a-database-in-postgresql-using-psql

0 голосов
/ 30 апреля 2009

вот ссылка на некоторые примеры резервного копирования и восстановления. Вы можете использовать резервную копию для восстановления на другой сервер или любой другой

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...