Как переместить каталог данных PostgreSQL в новое место в Ubuntu

    Команда Simple-Server
    03.06.2026
    5 мин

    Материал подготовлен командой Simple-Server для администраторов VPS и выделенных серверов. Команды и пути проверяйте на тестовой машине перед production.

    Кратко о задаче

    Для прохождения этого руководства вам понадобятся:

    • сервер Ubuntu 18.04 с непривилегированным пользователем и с sudo - правами;
    • установленный на вашем сервере PostgreSQL.

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

    Шаг 1 — Перемещаем каталог данных PostgreSQL

    Сначала нужно проверить текущее местоположение каталога, запустив интерактивный сеанс PostgreSQL. Здесь psql — это команда для входа в интерактивный монитор, а -u postgres указывает sudo выполнить psql от имени системного пользователя postgres:

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

    По умолчанию стоит каталог /var/lib/postgresql/10/main, поэтому нам нужно переместить именно его. Закройте командную строку, введя \q и нажав ENTER.

    Прежде чем менять что-либо в каталоге, нужно остановить PostgreSQL; так вы не нарушите целостность данных:

    sudo systemctl stop postgresql

    С помощью systemctl __ вы не сможете узнать результат выполнения всех команд. Нужно убедиться, что служба действительно остановлена. В этом поможет данная команда:

    sudo systemctl status postgresql

    Последняя строка вывода сообщит вам, что PostgreSQL действительно остановлен.

    Для того чтобы скопировать каталог в новое местоположение, мы будем использовать команду rsync. К ним можно добавить флаги: -a сохраняет разрешения и другие свойства у каталога, а -v обеспечивает детальный вывод – так вы сможете следить за прогрессом. Чтобы сымитировать изначальную структуру каталогов в новом местоположении, мы запустим rsync __ из каталога postgresql. Если мы создадим этот каталог postgresql __ в каталоге точки монтирования и сохраним право собственности за пользователем PostgreSQL, то не столкнёмся с проблемами разрешений во время обновлений в будущем.

    Примечание: если у вас включено автозавершение по табуляции, проверьте, чтобы в каталоге не было завершающей косой черты. В противном случае rsync будет просто сбрасывать содержимое каталога в точку монтирования, а не копировать сам каталог.

    Строго говоря, каталог с номером версии 10 необязателен, поскольку расположение в файле postgresql.conf было задано точно. Однако желательно следовать соглашению по проекту, особенно если позже возникнет необходимость запускать несколько версий PostgreSQL:

    sudo rsync -av /var/lib/postgresql /mnt/volume_nyc1_01

    Как только завершится копирование, переименуйте настоящую папку с расширением .bak и не удаляйте её до конца перемещения. Так ничего не перепутается из-за наличия каталогов с одинаковыми именами:

    sudo mv /var/lib/postgresql/10/main /var/lib/postgresql/10/main.bak

    Теперь мы можем настроить PostgreSQL для доступа к каталогу данных в новом месте.

    Шаг 2 — Указываем на новое местоположение каталога

    По умолчанию значение для data_directory выставлено на /var/lib/postgresql/10/main в файле /etc/postgresql/10/main/postgresql.conf. Его нужно отредактировать, чтобы указать новый каталог:

    sudo nano /etc/postgresql/10/main/postgresql.conf

    Теперь в строке, начинающейся с data_directory измените путь, чтобы указать новое местоположение. Обновлённая директива будет выглядеть примерно так:

    /etc/postgresql/10/main/postgresql.conf . . . data_directory = '/mnt/volume_nyc1_01/postgresql/10/main' . . .

    Сохраните файл и закройте его, нажав CTRL+X, затем Y и ENTER. Для настройки PostgreSQL в новом каталоге делать делать ничего больше не надо. На этом этапе осталось только снова включить службу PostgreSQL и проверить, что она действительно указывает на правильный каталог данных.

    Шаг 3 — Перезапускаем PostgreSQL

    После изменения директивы data_directory __ в файле postgresql.conf запустите сервер PostgreSQL с помощью systemctl:

    sudo systemctl start postgresql

    Проверьте статус сервера:

    sudo systemctl status postgresql

    Если служба запустилась правильно, вы увидите вот такую строку в конце вывода этой команды.

    Ну и наконец, чтобы убедиться, что используется именно новый каталог, откройте командную строку PostgreSQL.

    Ещё раз проверьте значение каталога данных:

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

    sudo rm -Rf /var/lib/postgresql/10/main.bak

    Таким образом, вы успешно переместили каталог данных PostgreSQL в новое местоположение.

    Разверните PostgreSQL в облаке за минуту

    Если вы верно следовали инструкциям, каталог вашей базы данных теперь в новом месте, а вы ещё ближе к возможности масштабирования хранилища. Поздравляем!


    Нужен сервер для практики? Арендуйте VPS/VDS в России — root-доступ, NVMe, DDoS-защита и поддержка 24/7.

    VPS для проекта

    VPS с root-доступом, NVMe и поддержкой 24/7 на Simple-Server.

    StarterVDS

    490

    в месяц

    1 ядро

    1 ГБ RAM

    20 ГБ NVMe

    • 1 IPv4
    • KVM
    • Root-доступ
    • Безлимитный трафик
    Заказать VPS
    Рекомендуем

    PerformanceVDS

    1190

    в месяц

    2 ядра

    4 ГБ RAM

    60 ГБ NVMe

    • 1 IPv4
    • KVM
    • Root-доступ
    • Базовая DDoS-защита
    Заказать VPS

    Нужна другая конфигурация или чистый VPS без панели?

    Все тарифы VPS

    Похожие статьи, которые могут быть вам интересны