Я хочу скопировать производственную базу данных PostgreSQL на сервер разработки. Какой самый быстрый и простой способ сделать это?
источник
Я хочу скопировать производственную базу данных PostgreSQL на сервер разработки. Какой самый быстрый и простой способ сделать это?
Вам не нужно создавать промежуточный файл. Ты можешь сделать
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
ssh remoteuser@remotehost "pg_dump -C dbname | bzip2" | bunzip2 | psql dbname
?Затем скопируйте резервную копию на сервер разработки, восстановите с помощью:
источник
Используйте pg_dump , а затем psql или pg_restore - в зависимости от того, выберете ли вы опции -Fp или -Fc для pg_dump.
Пример использования:
источник
Если вы хотите выполнить миграцию между версиями (например, вы обновили postgres и у вас запущен 9.1 на localhost: 5432 и 9.3 на localhost: 5434), вы можете запустить:
Проверьте документы по миграции .
источник
pg_basebackup
кажется, лучший способ сделать это сейчас, особенно для больших баз данных.Вы можете скопировать базу данных с сервера с такой же или более старой основной версией. Или точнее :
Для этого вам нужно на исходном сервере:
listen_addresses = '*'
чтобы иметь возможность подключиться с целевого сервера. Убедитесь, что порт 5432 открыт в этом отношении.max_wal_senders = 1
(-X fetch
),2
для-X stream
(по умолчанию в случае PostgreSQL 12) или более.wal_level = replica
или выше, чтобы иметь возможность установитьmax_wal_senders > 0
.host replication postgres DST_IP/32 trust
вpg_hba.conf
. Это предоставляет доступ кpg
кластеру любому пользователю сDST_IP
компьютера. Возможно, вы захотите прибегнуть к более безопасному варианту.Изменения 1, 2, 3 требуют перезагрузки сервера, изменение 4 требует перезагрузки.
На целевом сервере:
источник
Запустите эту команду с именем базы данных, которую вы хотите сделать резервную копию, чтобы получить дамп БД.
Теперь скопируйте этот файл дампа на удаленную машину, куда вы хотите скопировать БД.
На удаленной машине выполните следующую команду в папке ~ / some / для восстановления БД.
источник
Я очень много боролся, и в итоге метод, который позволил мне заставить его работать с Rails 4, был:
на вашем старом сервере
Мне пришлось использовать пользователя Postgres Linux для создания дампа. Также мне пришлось использовать -c, чтобы форсировать создание базы данных на новом сервере. --inserts говорит ему использовать синтаксис INSERT (), который в противном случае не работал бы для меня :(
затем на новом сервере просто:
Для передачи файла dump.sql между серверами я просто использовал «cat» для печати содержимого, а затем «nano» для его повторного копирования и вставки содержимого.
Кроме того, роль, которую я использовал в двух базах данных, отличалась, поэтому мне пришлось найти и заменить все имя владельца в дампе.
источник
Дамп вашей базы данных:
pg_dump database_name_name > backup.sql
Импортируйте вашу базу данных обратно:
psql db_name < backup.sql
источник
Позвольте мне поделиться сценарием оболочки Linux для копирования данных вашей таблицы с одного сервера на другой сервер PostgreSQL.
Ссылка взята из этого блога:
Linux Bash Shell Script для переноса данных между серверами PostgreSQL:
Я просто переношу данные; пожалуйста, создайте пустую таблицу на вашем конечном / втором сервере баз данных.
Это служебный скрипт. Кроме того, вы можете изменить скрипт для общего использования, например, добавив параметры для host_name, database_name, table_name и других
источник
Принятый ответ правильный, но если вы хотите избежать ввода пароля в интерактивном режиме, вы можете использовать это:
источник