Это будет зависеть от того, что является узким местом.
Вместо этого вы можете использовать pg_basebackup
, что избавит вас от необходимости вычислять новые индексы, как это делает pg_dump
. Но вы можете передавать гораздо больше данных, что может замедлить вас больше, чем ускорит.
Если пропускная способность сети является серьезным узким местом, вы можете войти на исходный сервер (123.123.123.123 ) и выполните pg_basebackup -Ft -D- -Xnone ... | pxz > backup.tar.xz
, затем используйте scp или rsyn c для передачи сжатых данных на новый сервер. Вам понадобится архив wal, чтобы новый сервер мог получать любые пропущенные WAL-файлы. Возможно, можно манипулировать слотами репликации, чтобы вам это не понадобилось, но pg_basebackup не позволяет легко это сделать.
xz очень медленный. pxz менее медленный, если у вас много процессоров, но все еще довольно медленный. Это стоит того, чтобы сеть работала медленнее, чем pxz. Если сеть не такая медленная, вы можете использовать более быстрый, но менее тщательный метод сжатия, например, gzip или его параллельную версию pigz.
Вы также можете сделать то же самое с pg_dump ... | pxz > dump.sql.xz
.
Если вы не хотите хранить сжатый файл на исходном сервере, вы можете передавать его по сети на лету, используя что-то вроде ssh 123.123.123.123 "pg_dump ...|pxz" | xzcat | psql ...
. (Или вы можете сделать то же самое с pg_basebackup вместо этого). Но проблема в том, что вы не можете возобновить работу из-за сбоя в сети, но должны повторить все с нуля. Вот почему я предпочитаю сохранять файл на исходном сервере, если для этого есть место.