Восстановите базу данных Postgres, используя pg_restore через SSH

У меня есть сервер базы данных без большого дискового пространства, поэтому я сделал резервную копию всей базы данных (давайте просто назовем ее красной) и сохранил ее локально, используя следующую команду (у меня не запущен pg на моем компьютере):

ssh admin@w.x.y.z "pg_dump -U postgres redblue -h localhost " \
 >> db_backup_redblue.sql

Я хотел бы сейчас восстановить его на другом сервере (1.2.3.4), который содержит более старую версию базы данных "redblue" - однако хотел бы спросить, верно ли это, прежде чем я попробую:

ssh admin@1.2.3.4 "pg_restore -U postgres -C redblue" \
<< db_backup_redblue.sql

Я не был уверен, нужно ли мне делать -C с именем БД или нет?

Будет ли указанная выше команда перезаписывать / восстанавливать удаленную базу данных с помощью локального файла?

Спасибо!

2 ответа

Решение

Нет, это не принесет ничего хорошего.

Вы должны начать pg_restore на машине, где находится свалка. На самом деле, так как это дамп простого формата, вы должны использовать psql скорее, чем pg_restore:

psql -h 1.2.3.4 -U postgres -d redblue -f db_backup_redblue.sql

Это требует, чтобы уже была пустая база данных redblue в целевой системе.

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

Если вы хотите использовать SSL, вам нужно настроить сервер PostgreSQL на прием SSL-соединений, см. Документацию.

Я бы порекомендовал "пользовательский" формат pg_dump,

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

На исходном хосте вы выполняете pg_dump, а затем перенаправляете через ssh на целевой хост следующим образом:

      pg_dump -C nextcloud | ssh -i .ssh/pg_nextcloud_key postgres@192.168.0.54 psql -d template1

Надеюсь, это поможет ;)

Другие вопросы по тегам