Установка 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. Выберите локаль, установленную в вашей системе.
Комментарии (0)