Установка PostgreSQL 16 из исходного кода

Описание

Это руководство описывает процесс самостоятельной сборки и установки реляционной базы данных PostgreSQL версии 16 из исходных кодов. Установка из исходного кода даёт полный контроль над параметрами компиляции, позволяет включить или отключить дополнительные модули и гарантирует совместимость с вашей операционной системой. Инструкция ориентирована на пользователей Linux (семейство RHEL, Debian, Ubuntu и их производные), но общие шаги применимы и для других UNIX-подобных систем.

Что понадобится

  • Операционная система: Linux (например CentOS 7+, Ubuntu 20.04+, Debian 11+) или другая UNIX-подобная ОС с установленным компилятором C.
  • Компилятор C: GCC или Clang.
  • Утилита сборки: GNU Make (рекомендуется версия 3.81 или новее).
  • Библиотеки и заголовочные файлы (пакеты с именами -dev / -devel):
    • readline и readline-devel – для поддержки интерактивной командной строки.
    • zlib и zlib-devel – для сжатия резервных копий и WAL-файлов.
    • openssl и openssl-devel – для шифрования соединений (опционально, но рекомендуется).
    • libxml2, libxslt, icu, gettext и другие – в зависимости от требуемой функциональности.
  • Права: root или возможность выполнять команды через sudo.
  • Загрузчик: wget или curl для скачивания исходного архива.

Пошаговая инструкция

1. Установка зависимостей

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

Для Debian / Ubuntu:

sudo apt update
sudo apt install build-essential libreadline-dev zlib1g-dev libssl-dev libxml2-dev libxslt1-dev icu-devtools gettext

Для CentOS / RHEL / Fedora:

sudo yum groupinstall "Development Tools"
sudo yum install readline-devel zlib-devel openssl-devel libxml2-devel libxslt-devel libicu-devel gettext-devel

2. Создание системного пользователя (рекомендуется)

Для безопасности запуска сервера создайте отдельного пользователя postgres (от его имени будет работать СУБД):

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

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

3. Загрузка исходного кода PostgreSQL 16

Перейдите в каталог, где вы будете собирать программу (например, /usr/local/src или ваш домашний каталог), и скачайте официальный исходный тарболл.

wget https://ftp.postgresql.org/pub/source/v16.4/postgresql-16.4.tar.gz   # версия может отличаться

Замените номер версии на актуальную, доступную на официальном сайте.

4. Распаковка архива

tar xzf postgresql-16.4.tar.gz
cd postgresql-16.4

5. Конфигурирование (configure)

На этом этапе вы можете задать параметры сборки. Стандартная установка в /usr/local/pgsql:

./configure --prefix=/usr/local/pgsql

Если нужна поддержка SSL, ICU, XML или других расширений, добавьте соответствующие флаги. Пример с основными расширениями:

./configure --prefix=/usr/local/pgsql \
            --with-openssl \
            --with-libxml \
            --with-libxslt \
            --with-icu \
            --with-ldap \
            --with-systemd

Программа configure проверит наличие всех необходимых библиотек и сообщит об ошибках, если что-то не найдено.

6. Сборка (make)

Запустите компиляцию:

make -j$(nproc)

Параметр -j$(nproc) ускоряет процесс, запуская параллельную компиляцию в соответствии с количеством ядер процессора.

7. Установка

Установите скомпилированные файлы в выбранный префикс:

sudo make install

8. Инициализация каталога данных (Data Directory)

Каталог для хранения баз данных обычно создаётся в /usr/local/pgsql/data.

sudo mkdir -p /usr/local/pgsql/data
sudo chown postgres:postgres /usr/local/pgsql/data

Затем выполните инициализацию от имени пользователя postgres:

sudo -u postgres /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data

9. Запуск сервера и проверка

Запустите PostgreSQL:

sudo -u postgres /usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l /var/log/postgresql.log start

Проверьте, что сервер работает:

sudo -u postgres /usr/local/pgsql/bin/psql -c "SELECT version();"

Вы должны увидеть строку с версией PostgreSQL 16.

10. (Опционально) Автозапуск через systemd

Создайте файл сервиса /etc/systemd/system/postgresql.service со следующим содержимым:

[Unit]
Description=PostgreSQL 16 database server
After=network.target

[Service]
Type=forking
User=postgres
Group=postgres
ExecStart=/usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l /var/log/postgresql.log start
ExecStop=/usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data stop
ExecReload=/usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data reload
PIDFile=/usr/local/pgsql/data/postmaster.pid

[Install]
WantedBy=multi-user.target

Затем активируйте сервис:

sudo systemctl daemon-reload
sudo systemctl enable postgresql
sudo systemctl start postgresql

Возможные ошибки и их решения

  • configure: error: no acceptable C compiler found in $PATH – Установите GCC: sudo apt install gcc или sudo yum install gcc.

  • configure: error: readline library not found – Установите пакет libreadline-dev (Debian/Ubuntu) или readline-devel (RHEL/CentOS).

  • configure: error: cannot find the perl module ExtUtils::Embed – Если нужна поддержка Perl, установите perl-ExtUtils-Embed или отключите эту опцию при конфигурации.

  • make: команда не найдена – Установите GNU make: sudo apt install make или sudo yum install make.

  • Permission denied при make install – Используйте sudo make install или соберите с префиксом, в котором у вас есть права на запись.

  • initdb: error: could not create directory – Проверьте права на родительский каталог (обычно /usr/local/pgsql). Убедитесь, что каталог data создан и принадлежит пользователю postgres.

  • Сервер не запускается: could not bind address – Проверьте, не использует ли другой процесс порт 5432. Измените порт в файле postgresql.conf.

  • Версия библиотеки несовместима – Убедитесь, что установлены именно development-версии пакетов (с суффиксом -dev или -devel).

Полезные советы

  • Используйте символическую ссылку для удобства: sudo ln -sf /usr/local/pgsql/bin/psql /usr/local/bin/psql – это позволит вызывать клиент psql без указания полного пути.
  • Настройте PATH для пользователя postgres: добавьте строку export PATH=/usr/local/pgsql/bin:$PATH в /var/lib/postgresql/.bashrc (или /var/lib/postgresql/.profile).
  • Включайте модули только необходимые – каждая дополнительная библиотека может увеличить время сборки и потребовать установки дополнительных пакетов.
  • Параллельная сборка: используйте make -j$(nproc) для ускорения. Если возникают ошибки, повторите make без флага -j.
  • Для обновления версии: остановите сервер, установите новую версию в тот же префикс и выполните pg_upgrade. Документация PostgreSQL рекомендует делать дамп перед обновлением.
  • Логи сервера записываются в файл, указанный при запуске через -l. Если что-то пошло не так, смотрите этот файл.
  • Для корректной работы с русским языком: при инициализации базы можно указать кодировку и локаль: initdb -D /usr/local/pgsql/data --locale=en_US.UTF-8 --encoding=UTF8. Выберите локаль, установленную в вашей системе.