Как установить PostgreSQL из исходного кода: инструкция

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

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

    Создание и подготовка сервера

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

    Создание облачного сервера

    После создания учётной записи можно приступить к аренде облачного сервера.

    1. Переходим на страницу авторизации и входим в аккаунт, используя логин или адрес электронной почты и пароль, либо через Pass, ВКонтакте, GitHub, Google.

    2. После успешной авторизации открывается панель управления текущего проекта. Переходим в раздел «Облачные серверы» и нажимаем «Создать» или «Добавить».

    3. Выбираем операционную систему для установки на сервер. В нашем случае это будет Ubuntu версии 22.04.

    4. Определяемся с регионом, в котором будет размещен сервер. Рекомендуется выбрать регион, находящийся ближе всего к вам.

    Переходим на страницу авторизации и входим в аккаунт, используя логин или адрес электронной почты и пароль, либо через Pass, ВКонтакте, GitHub, Google.

    После успешной авторизации открывается панель управления текущего проекта. Переходим в раздел «Облачные серверы» и нажимаем «Создать» или «Добавить».

    Выбираем операционную систему для установки на сервер. В нашем случае это будет Ubuntu версии 22.04.

    Определяемся с регионом, в котором будет размещен сервер. Рекомендуется выбрать регион, находящийся ближе всего к вам.

    1. Конфигурацию сервера необходимо выбирать исходя из требований вашего проекта. Для демонстрационных целей выберем сервер с 1 ядром, 1 ГБ ОЗУ и диском объемом 15 ГБ.

    2. Для установки и работы базы данных нам потребуется публичный IPv4-адрес. Также, при необходимости вы можете добавить сервер в приватную сеть.

    3. Для повышения безопасности и надежности данных можно подключить резервные копии и защиту от DDoS-атак (последняя доступна только в Санкт-Петербурге и Москве).

    4. Также можно заранее загрузить SSH-ключ, чтобы не входить на сервер с помощью пароля. Подробности можно найти в статье «Авторизация по SSH-ключу». Ключ добавляется только для root-пользователя.

    5. Выберите проект, в котором будет располагаться сервер, и придумайте имя.

    6. Нажмите «Заказать» для создания сервера. Если на вашем аккаунте недостаточно средств, появится предупреждение о необходимости пополнить баланс. После оплаты и создания сервера откроется главная страница сервера, где можно будет найти IP-адрес и реквизиты root-пользователя для подключения.

    Обновление системы и установка необходимых пакетов

    Авторизуемся на сервере по SSH по реквизитам из панели управления и приступаем к установке.

    В первую очередь обновите систему и установите требуемые пакеты:

    sudo apt update -y sudo apt upgrade -y

    PostgreSQL поддерживает множество UNIX-подобных платформ. СУБД можно установить как на большинство дистрибутивов Linux, так и на Windows и MacOS.

    Во время установки используйте пользователя с правами sudo. Не рекомендуется производить установку через root-пользователя.

    На официальном сайте необходимо выбрать желаемую версию. Чтобы установить СУБД PostgeSQL 16.4, переходим в терминал и вводим:

    wget https://ftp.postgresql.org/pub/source/v16.4/postgresql-16.4.tar.gz

    Далее проверяем архив с исходниками с помощью md5sum, чтобы убедиться в подлинности файла. Она должна совпадать с хэш-суммой на сайте.

    md5sum postgresql-16.4.tar.gz 6849302e68ba1984cee67cd6eab2b930  postgresql-16.4.tar.gz

    Распаковываем архив утилитой tar и переходим в директорию.

    tar -xzvf postgresql-16.4.tar.gz cd postgresql-16.4

    Установка PostgreSQL из исходников требует установки зависимостей.

    sudo apt install -y gcc make pkg-config libreadline-dev zlib1g-dev icu-devtools libicu-dev

    Переходим к конфигурированию базы данных.

    ./configure --prefix=/usr/local/lib/postgresql/16/ --libdir=/usr/local/lib/postgresql/16/lib/

    Здесь --prefix отвечает за путь, где хранится каталог, а --libdir — за место хранения библиотек и модулей.

    Также можно задать следующие параметры:

    • --prefix=PREFIX: Задает основной каталог для установки всех файлов. По умолчанию это /usr/local/pgsql, но вы можете изменить его на любое другое место. Важно отметить, что файлы будут установлены в соответствующие подкаталоги, а не напрямую в каталог, указанный в PREFIX.

    • --exec-prefix=EXEC-PREFIX: Определяет каталог для установки файлов, зависящих от архитектуры (например, исполняемых файлов и библиотек). Это может быть полезно, если вам нужно разделить файлы, зависящие от архитектуры, и независимые файлы, чтобы использовать их на разных хостах. Если этот параметр не указан, он автоматически принимает значение, указанное в --prefix.

    • --bindir=DIRECTORY: Указывает каталог, в который будут установлены исполняемые файлы, такие как psql и initdb. По умолчанию это EXEC-PREFIX/bin, что обычно означает /usr/local/pgsql/bin.

    • --sysconfdir=DIRECTORY: Определяет каталог для хранения конфигурационных файлов, таких как postgresql.conf. По умолчанию это PREFIX/etc.

    • --libdir=DIRECTORY: Задает каталог для установки библиотек и динамически загружаемых модулей. По умолчанию используется EXEC-PREFIX/lib.

    • --includedir=DIRECTORY: Указывает каталог для установки файлов заголовков C и C++. По умолчанию это PREFIX/include.

    • --datarootdir=DIRECTORY: Устанавливает корневой каталог для различных типов файлов, доступных только для чтения, например, документации и данных для локализации. По умолчанию это PREFIX/share.

    • --datadir=DIRECTORY: Указывает каталог для установки файлов, доступных только для чтения, которые используются установленными программами. Это не влияет на местоположение ваших файлов базы данных. По умолчанию используется DATAROOTDIR.

    • --localedir=DIRECTORY: Определяет каталог для установки данных локализации, таких как файлы перевода сообщений. По умолчанию это DATAROOTDIR/locale.

    • --mandir=DIRECTORY: Указывает каталог для установки man-страниц, связанных с PostgreSQL. По умолчанию это DATAROOTDIR/man.

    • --docdir=DIRECTORY: Указывает корневой каталог для установки файлов документации (за исключением man-страниц). По умолчанию используется DATAROOTDIR/doc/postgresql.

    • --htmldir=DIRECTORY: Задает каталог для установки HTML-документации для PostgreSQL. По умолчанию используется DATAROOTDIR.

    --prefix=PREFIX: Задает основной каталог для установки всех файлов. По умолчанию это /usr/local/pgsql, но вы можете изменить его на любое другое место. Важно отметить, что файлы будут установлены в соответствующие подкаталоги, а не напрямую в каталог, указанный в PREFIX.

    --exec-prefix=EXEC-PREFIX: Определяет каталог для установки файлов, зависящих от архитектуры (например, исполняемых файлов и библиотек). Это может быть полезно, если вам нужно разделить файлы, зависящие от архитектуры, и независимые файлы, чтобы использовать их на разных хостах. Если этот параметр не указан, он автоматически принимает значение, указанное в --prefix.

    --bindir=DIRECTORY: Указывает каталог, в который будут установлены исполняемые файлы, такие как psql и initdb. По умолчанию это EXEC-PREFIX/bin, что обычно означает /usr/local/pgsql/bin.

    --sysconfdir=DIRECTORY: Определяет каталог для хранения конфигурационных файлов, таких как postgresql.conf. По умолчанию это PREFIX/etc.

    --libdir=DIRECTORY: Задает каталог для установки библиотек и динамически загружаемых модулей. По умолчанию используется EXEC-PREFIX/lib.

    --includedir=DIRECTORY: Указывает каталог для установки файлов заголовков C и C++. По умолчанию это PREFIX/include.

    --datarootdir=DIRECTORY: Устанавливает корневой каталог для различных типов файлов, доступных только для чтения, например, документации и данных для локализации. По умолчанию это PREFIX/share.

    --datadir=DIRECTORY: Указывает каталог для установки файлов, доступных только для чтения, которые используются установленными программами. Это не влияет на местоположение ваших файлов базы данных. По умолчанию используется DATAROOTDIR.

    --localedir=DIRECTORY: Определяет каталог для установки данных локализации, таких как файлы перевода сообщений. По умолчанию это DATAROOTDIR/locale.

    --mandir=DIRECTORY: Указывает каталог для установки man-страниц, связанных с PostgreSQL. По умолчанию это DATAROOTDIR/man.

    --docdir=DIRECTORY: Указывает корневой каталог для установки файлов документации (за исключением man-страниц). По умолчанию используется DATAROOTDIR/doc/postgresql.

    --htmldir=DIRECTORY: Задает каталог для установки HTML-документации для PostgreSQL. По умолчанию используется DATAROOTDIR.

    Эти параметры позволяют точно настроить, где будут размещены различные компоненты PostgreSQL, что может быть важно для организации и управления системой в различных окружениях. Более подробно со всеми настройками конфигурирования можно ознакомиться в документации Postgres.

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

    При этом важно использовать утилиту GNU Make. Процесс сборки займет несколько минут, в зависимости от характеристик вашего оборудования.

    Если вы хотите собрать не только основную часть системы, но и всю возможную документацию (включая HTML и man-страницы), а также дополнительные модули (contrib), используйте команду:

    Если вам нужно собрать все, включая дополнительные модули (contrib), но без документации, воспользуйтесь командой:

    Выбрать нужный вариант сборки необходимо исходя из требования проекта. В статье будем использовать установку make world.

    Проверим, что сборка проекта произошла без ошибок.

    Чтобы запустить установку PostgreSQL версии world, введите:

    Если для сборки вы использовали только стандартную часть системы, введите команду:

    make install make install-docs make install-world-bin

    В PostgreSQL кластером баз данных называется группа баз, которые физически хранятся в определенной директории. Один сервер PostgreSQL способен обслуживать несколько таких кластеров, но для этого они должны быть настроены на использование разных портов. Директория, где расположен основной кластер, обычно обозначается как PGDATA.

    Некоторые утилиты PostgreSQL, такие как initdb, могут обращаться к переменной окружения PGDATA, чтобы определить расположение основного кластера баз данных.

    Для начала создадим системного пользователя с именем postgres, под которым будут выполняться все операции с базами данных. Пароль для этого пользователя можно оставить пустым, чтобы предотвратить доступ других пользователей, однако root или sudo-пользователь сможет выполнять действия от его имени.

    sudo useradd postgres -d /var/local/lib/postgresql/ -s /bin/bash

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

    sudo mkdir -p /var/local/lib/postgresql/16/main/ sudo chown -R postgres:postgres /var/local/lib/postgresql/

    После этого переключимся на пользователя postgres:

    Теперь добавим необходимые переменные окружения для пользователя postgres, применим изменения и проверим их:

    echo "export PGDATA=/var/local/lib/postgresql/16/main/" >> .bash_profile echo "PATH=/usr/local/lib/postgresql/16/bin/:$PATH" >> .bash_profile . .bash_profile ls -ld $PGDATA drwxr-sr-x 2 postgres postgres 4096 Aug 19 18:20 /var/local/lib/postgresql/16/main/ whereis psql psql: /usr/local/lib/postgresql/16/bin/psql

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

    Обратите внимание, что по умолчанию генерируется кластер с английской локалью en_US.UTF-8. Чтобы база данных использовала по умолчанию русскую локализацию, необходимо перед инициализацией кластера настроить локаль.

    Установите локаль ru_RU.UTF-8 в системе. Вы можете добавить её, используя команду locale-gen или эквивалентные команды, в зависимости от вашей операционной системы.

    sudo locale-gen ru_RU.UTF-8 sudo update-locale

    Теперь перед инициализацией кластера указываем:

    export LC_CTYPE=ru_RU.UTF-8

    Запуск и остановка кластера

    Для управления кластером баз данных PostgreSQL используется утилита pg_ctl. Эта команда позволяет запускать, останавливать кластер, а также проверять его текущее состояние. Утилита pg_ctl опирается на переменную окружения PGDATA, которая указывает на каталог, где находится кластер. Также с помощью опции -l <файл> можно указать файл журнала, в который будут записываться сообщения о работе сервера.

    Чтобы запустить кластер и записать журнал в файл postgres.log, выполните команду:

    pg_ctl -l postgres.log start waiting for server to start.... done server started

    Учтите, что только пользователи postgres или root имеют право запускать и останавливать кластер.

    Для проверки статуса сервера используйте команду:

    pg_ctl: server is running (PID: 13519) /usr/local/lib/postgresql/16/bin/postgres

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

    now ------------------------------- 2024-08-19 18:47:32.003335+03 (1 row)

    Для остановки сервера выполните:

    Для получения дополнительной информации о работе утилиты pg_ctl вы можете обратиться к документации PostgreSQL.

    После завершения работы вернитесь к своему обычному пользователю, выполнив:

    Этот процесс позволит вам управлять кластером баз данных PostgreSQL и выполнять основные операции, такие как запуск, проверка состояния и остановка сервера.

    Создание службы systemd для кластера PostgreSQL

    Настройка службы для основного кластера

    Чтобы управлять кластером PostgreSQL с помощью systemd, нам нужно создать специальную службу. Для этого сначала разлогинимся из пользователя postgres, на которого мы переключились ранее

    Теперь создадим файл службы для основного кластера PostgreSQL:

    sudo nano /etc/systemd/system/postgresql.service

    В файл добавляем следующую конфигурацию:

    [Unit] Description=PostgreSQL database server Documentation=man:postgres(1) After=network-online.target Wants=network-online.target [Service] Type=forking User=postgres ExecStart=/usr/local/lib/postgresql/16/bin/pg_ctl -D /var/local/lib/postgresql/16/main/ -l /var/local/lib/postgresql/16/main/postgres-main.log start ExecReload=/bin/kill -HUP $MAINPID KillMode=mixed KillSignal=SIGINT [Install] WantedBy=multi-user.target

    Примените изменения и запустите службу:

    sudo systemctl daemon-reload sudo systemctl start postgresql.service

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

    systemctl status postgresql.service

    Вывод команды может выглядеть следующим образом:

    Включение службы в автозагрузку

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

    sudo systemctl enable postgresql.service

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

    sudo systemctl disable postgresql.service

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


    Нужен сервер для практики? Арендуйте 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

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