Копирование базы данных PostgreSQL на другой сервер - PullRequest
445 голосов
/ 06 августа 2009

Я хочу скопировать производственную базу данных PostgreSQL на сервер разработки. Какой самый быстрый и простой способ сделать это?

Ответы [ 10 ]

591 голосов
/ 06 августа 2009

Вам не нужно создавать промежуточный файл. Вы можете сделать

pg_dump -C -h localhost -U localuser dbname | psql -h remotehost -U remoteuser dbname

или

pg_dump -C -h remotehost -U remoteuser dbname | psql -h localhost -U localuser dbname

с использованием psql или pg_dump для подключения к удаленному хосту.

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

Как сказал Корнел, нет необходимости создавать дамп в промежуточный файл, если вы хотите работать сжато, вы можете использовать сжатый туннель

pg_dump -C dbname | bzip2 | ssh  remoteuser@remotehost "bunzip2 | psql dbname"

или

pg_dump -C dbname | ssh -C remoteuser@remotehost "psql dbname"

но это решение также требует получения сеанса в обоих концах.

120 голосов
/ 06 августа 2009
pg_dump the_db_name > the_backup.sql

Затем скопируйте резервную копию на сервер разработки, восстановите с помощью:

psql the_new_dev_db < the_backup.sql
37 голосов
/ 06 августа 2009

Используйте pg_dump и более поздние версии psql или pg_restore - в зависимости от того, выберете ли вы опции -Fp или -Fc для pg_dump.

Пример использования:

ssh production
pg_dump -C -Fp -f dump.sql -U postgres some_database_name
scp dump.sql development:
rm dump.sql
ssh development
psql -U postgres -f dump.sql
21 голосов
/ 20 мая 2015

Если вы хотите выполнить миграцию между версиями (например, вы обновили postgres и у вас запущен 9.1 на локальном хосте: 5432 и 9.3 на локальном хосте: 5434), вы можете запустить:

pg_dumpall -p 5432 -U myuser91 | psql -U myuser94 -d postgres -p 5434

Ознакомьтесь с документами по миграции .

13 голосов
/ 04 февраля 2015

pg_basebackup кажется лучшим способом сделать это сейчас, особенно для больших баз данных.

6 голосов
/ 12 марта 2015

Запустите эту команду с именем базы данных, которую хотите сделать резервную копию, чтобы получить дамп БД.

 pg_dump -U {user-name} {source_db} -f {dumpfilename.sql}

 eg. pg_dump -U postgres mydbname -f mydbnamedump.sql

Теперь скопируйте этот файл дампа на удаленный компьютер, на который вы хотите скопировать БД.

eg. scp mydbnamedump.sql user01@remotemachineip:~/some/folder/

На удаленном компьютере выполните следующую команду в ~ / some / folder для восстановления БД.

 psql -U {user-name} -d {desintation_db}-f {dumpfilename.sql}

 eg. psql -U postgres -d mynewdb -f mydbnamedump.sql
4 голосов
/ 08 января 2015

Я очень много боролся, и в итоге метод, который позволил мне заставить его работать с Rails 4, был:

на вашем старом сервере

sudo su - postgres
pg_dump -c --inserts old_db_name > dump.sql

Мне пришлось использовать пользователя postgres linux для создания дампа. Также мне пришлось использовать -c, чтобы форсировать создание базы данных на новом сервере. --inserts говорит ему использовать синтаксис INSERT (), который в противном случае не работал бы для меня: (

затем, на новом сервере, просто:

sudo su - postgres
psql new_database_name < dump.sql

для передачи файла dump.sql между серверами. Я просто использовал «cat» для печати содержимого, а затем «nano» для его повторного копирования и вставки содержимого.

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

3 голосов
/ 02 марта 2017

Позвольте мне поделиться сценарием оболочки Linux для копирования данных вашей таблицы с одного сервера на другой сервер PostgreSQL.

Ссылка взята из этого блога:

Сценарий Linux Bash Shell для переноса данных между серверами PostgreSQL:

#!/bin/bash
psql \
    -X \
    -U user_name \
    -h host_name1 \
    -d database_name \
    -c "\\copy tbl_Students to stdout" \
| \
psql \
    -X \
    -U user_name \
    -h host_name2 \
    -d database_name \
    -c "\\copy tbl_Students from stdin"

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

Это служебный скрипт. Кроме того, вы можете изменить скрипт для общего использования, например, добавив параметры для host_name, database_name, table_name и других

2 голосов
/ 10 апреля 2018

Дамп вашей базы данных: pg_dump database_name_name > backup.sql


Импорт вашей базы данных обратно: psql db_name < backup.sql

0 голосов
/ 12 апреля 2019

Принятый ответ правильный, но если вы хотите избежать интерактивного ввода пароля, вы можете использовать это:

PGPASSWORD={{export_db_password}} pg_dump --create -h {{export_db_host}} -U {{export_db_user}} {{export_db_name}} | PGPASSWORD={{import_db_password}} psql -h {{import_db_host}} -U {{import_db_user}} {{import_db_name}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...