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

Обратите внимание, что если вы используете виртуальную среду (как в режиме совместного хостинга), вы должны настроить свой путь на python, например: /home/user/mypython/bin/python ./cgi-bin/test.py

449
задан Acumenus 19 June 2015 в 17:07
поделиться

5 ответов

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

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"

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

Примечание: pg_dump предназначен для резервного копирования, а psql - для восстановления. Итак, первая команда в этом ответе - это копирование с локального на удаленное, а вторая - с удаленного на локальное . Подробнее -> https://www.postgresql.org/docs/9.6/app-pgdump.html

621
ответ дан 22 November 2019 в 22:55
поделиться
pg_dump the_db_name > the_backup.sql

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

psql the_new_dev_db < the_backup.sql
120
ответ дан unmounted 19 June 2015 в 17:07
поделиться

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

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

Linux Bash Shell Script для переноса данных между серверами 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 и других

3
ответ дан Anvesh 19 June 2015 в 17:07
поделиться

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

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}}
0
ответ дан zoran 19 June 2015 в 17:07
поделиться

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

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

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
37
ответ дан 22 November 2019 в 22:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: