Копирование базы данных PostgreSQL на другой сервер

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

9 ответов


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

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 для подключения к удаленному узлу.

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

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

pg_dump -C dbname | bzip2 | ssh  [email protected] "bunzip2 | psql dbname"

или

pg_dump -C dbname | ssh -C [email protected] "psql dbname"

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


pg_dump the_db_name > the_backup.sql

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

psql the_new_dev_db < the_backup.sql

использовать помощью 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

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

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

Проверьте миграционные документы.


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


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

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

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

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

eg. scp mydbnamedump.sql [email protected]:~/some/folder/

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

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

 eg. psql -U postgres -d mynewdb -f mydbnamedump.sql

я боролся довольно много, и в конце концов метод, который позволил мне заставить его работать с 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

для передачи дампа.язык SQL файл между сервером я просто использовал " cat "для печати контента и чем" nano", чтобы воссоздать его copypasting контента.

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


позвольте мне поделиться скриптом оболочки 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"

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

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



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


импорт базы данных: psql db_name < backup.sql