перемещение большой базы данных PostgreSQL / PostGIS

8

Мне нужно переместить и обновить очень большую (~ 320 ГБ) базу данных PostGIS с сервера1 (PostgreSQL 9.1, PostGIS 1.5) на сервер2 (PostgreSQL 9.3, PostGIS 2.1).

Процесс обновления хорошо документирован . Проблема в том, что у меня недостаточно места на сервере server1, чтобы скопировать туда файл, проверить его, затем скопировать на сервер server2 и проверить суммы. Я старался:

  • Передача дампа с сервера1 на сервер2 с помощью nc.
  • Запись файла дампа непосредственно в файловую систему server2, которая смонтирована на server1 с помощью sshfs.

Оба раза файл дампа кажется поврежденным. pg_restoreсломался в разных местах с ошибками вроде этого:

pg_restore: [compress_io] could not uncompress data: incorrect data check

Кто-нибудь может предложить лучший способ сделать это движение и обновить?

ОБНОВЛЕНИЕ: Попробовал NFS (и дал SSHFS еще одну попытку). Понятно, что эти удаленные файловые системы не могут надежно передавать столько данных . В результирующем файле SQL явно отсутствуют блоки, что приводит к синтаксическим ошибкам вроде этого во время импорта:

ERROR:  invalid input syntax for integer: "8266UPDATE spatial_ref_sys o set auth_name = n.auth_name, auth_srid = n.auth_srid, srtext = n.srtext, proj4text = n.proj4text FROM _pgis_restore_spatial_ref_sys n WHERE o.srid = n.srid;"
kontextify
источник
Второй вариант кажется хорошим, но почему бы вам не использовать NFS? Возможно, есть какое-то небольшое прерывание, которое не очень хорошо обрабатывается sshfs. 320Gb довольно большой файл.
Марко
1
Купить диск побольше? 1Tb стоит почти ничего в эти дни.
Colin 't Hart
Оказывается, NFS так же ненадежен, как и SSHFS, для передачи такого большого количества данных. Обновление вопроса.
kontextify

Ответы:

7

Я бы порекомендовал сбросить базу данных 9.1 с вашего нового сервера 9.3 следующим образом:

pg_dump -h remoteserver -U remoteuser remotedbname -Fc -f my_old_server_backup.dump

Я рекомендую использовать 9.3, pg_dumpпоскольку pg_dumpон всегда обратно совместим, но не совместим напрямую. Другими словами, новееpg_dump позаботится о любых изменениях синтаксиса, которые требует новый сервер, о которых старая утилита не знает.

Убедитесь, что ваш pg_hba.confи listen_addressesв postgresql.confнастроены так, чтобы вы также могли удаленно подключаться и дамп соответственно.

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

pg_dump -h remotehost -U remoteuser remotedbname | psql -U localuser localdbname

Надеюсь, это поможет. знак равно

Кассандры
источник
«Сброс и восстановление за один шаг», вероятно, не сработает из-за различий между версиями PostGIS, но удаленный запуск дампа с принимающего сервера и восстановление с него! Это явно лучше, чем использование сетевых файловых систем. Спасибо, теперь у меня есть работающая база данных!
kontextify
Это перформативный процесс? Мне кажется, что это займет несколько дней. Тогда pgdump создаст файл дампа ~ 300 ГБ, если я не использую удаленное резервное копирование между серверами?
deFreitas