TGViewer
Записки IT специалиста Записки IT специалиста @interface31 · 9K subscribers
Post #5141 2.93K
Перенос баз данных PostgreSQL между серверами

Такая задача встречается не так уж и редко, но практически везде приведен один и тот же сценарий: выгрузить базы в дамп – загрузить базы из дампа.

Все это хорошо, но ровно до тех пор, пока не дойдет до практического применения. Для начала базы надо куда-то выгрузить, с учетом имеющихся прав доступа у всех участников этого процесса.

Затем их надо на второй сервер как-то передать и снова куда-то сложить, снова не забыть про права.

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

Но есть способ проще, гораздо проще, достаточно вспомнить, что служебные утилиты Postgres умеют работать с удаленными серверами и поддерживают стандартные потоки ввода вывода.

Для того, чтобы подключиться к другому узлу используйте ключ -h:
-h имя_сервера


Если пользователь удаленного сервера отличается от текущего пользователя СУБД, то дополнительно используем ключ -U:
-U имя_пользователя


Теперь несколько практических примеров:

На целевом сервере переключаемся на учетную запись суперпользователя СУБД:
su - postgres


Теперь можно посмотреть базы на текущем сервере:
psql -l


И на удаленном:
psql -h SRV-02 -l 


Перед тем как переносить базы на сервере приемнике их нужно создать, причем обязательно использовать для этого template0:
createdb -T template0 newbase


Это также можно сделать удаленно, не вставая с любимого дивана:
 createdb -h SRV-02  -T template0 newbase


Ну вот, все готово к переносу. Выгружаем здесь и по конвейеру передаем туда:
pg_dump  oldbase | psql -h SRV-02 newbase


Также можно выполнить всю эту операцию полностью удаленно, это может пригодиться, если сервера СУБД находятся у вас в разных подсетях и не видят друг друга или в контейнерах с минимальным набором инструментов.

Все что вам понадобится – это клиент Postgres:
apt install postgresql-client-<VERSION>


Версию ставим ту, что в дистрибутиве, ее номер роли не играет, так же, как и базы можно переносить между серверами различных версий.

Теперь переносим базы с одного на другой командой:
pg_dump -h SRV-01  oldbase | psql -h SRV-02 newbase


Первая часть команды выгрузит базу с удаленного сервера в стандартный поток вывода, а вторая загрузит на другой удаленный сервер через стандартный поток ввода.
  • 👍 47
  • 🔥 11
  • ❤ 6
  • 🥱 1
More from @interface31
  1. Oct 6, 2026Мифы и легенды Active Directory – откуда ноги растут Как мы уже неоднократно говорили, адм…
  2. Oct 6, 2026Прогнозирования выхода твердотельных накопителей из строя Данный материал основан сугубо н…
  3. Oct 6, 2026Post #6844
  4. Oct 5, 2026Развод и кухня пополам На этой неделе в очередной раз столкнулись с нехорошей и некрасивой…
  5. Oct 5, 2026Post #6842
  6. Oct 5, 2026Неожиданный взгляд на BolgenOS В любой теме, касающейся Linux-дистрибутивов вообще и импор…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →