Установка PostgreSQL из исходников: Пошаговая инструкция 2024 | AdminWiki

Установка PostgreSQL из исходников: Полное руководство для разработчиков и DevOps

18 декабря 2025 8 мин. чтения #devops #linux #postgresql #базы данных #исходный код #компиляция #установка PostgreSQL

Представь, что тебе нужна специфичная версия PostgreSQL с особыми параметрами сборки, или ты хочешь собрать СУБД с максимальной оптимизацией под своё железо. Установка из пакетного менеджера не даёт такой гибкости. Давай разберём, как выполнить установку PostgreSQL из исходников — это даст полный контроль над конфигурацией и процессом сборки.

Подготовка системы к установке PostgreSQL

Перед компиляцией PostgreSQL из исходного кода необходимо установить зависимости для сборки. Без них процесс завершится ошибкой.

Важно: Все команды выполняются от имени пользователя с правами sudo. Для production-систем рекомендуется использовать отдельного системного пользователя.

Установка зависимостей для сборки

В зависимости от дистрибутива Linux, команды будут отличаться:

Для Debian/Ubuntu:

bash
sudo apt update
sudo apt install -y build-essential libreadline-dev \
  zlib1g-dev flex bison libxml2-dev libxslt-dev \
  libssl-dev libxml2-utils xsltproc ccache \
  libsystemd-dev pkg-config libicu-dev \
  python3-dev tcl-dev libperl-dev git

Для CentOS/RHEL/Rocky Linux:

bash
sudo yum groupinstall -y "Development Tools"
sudo yum install -y readline-devel zlib-devel \
  flex bison libxml2-devel libxslt-devel \
  openssl-devel libicu-devel systemd-devel \
  perl-devel perl-ExtUtils-Embed python3-devel \
  tcl-devel git ccache

Скачивание и распаковка исходного кода PostgreSQL

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

bash
# Создаём рабочую директорию
mkdir -p ~/postgresql-build
cd ~/postgresql-build

# Скачиваем исходный код (пример для версии 16.2)
wget https://ftp.postgresql.org/pub/source/v16.2/postgresql-16.2.tar.gz

# Проверяем контрольную сумму (рекомендуется)
wget https://ftp.postgresql.org/pub/source/v16.2/postgresql-16.2.tar.gz.sha256
sha256sum -c postgresql-16.2.tar.gz.sha256

# Распаковываем архив
tar -xzf postgresql-16.2.tar.gz
cd postgresql-16.2
Внимание: Всегда проверяйте контрольные суммы скачанных архивов. Это гарантирует, что исходный код не был изменён или повреждён при загрузке.

Конфигурация и сборка PostgreSQL

Это самый важный этап установки PostgreSQL из исходников. Здесь ты определяешь параметры сборки, которые влияют на производительность и функциональность.

Настройка параметров конфигурации

Запусти скрипт configure с нужными параметрами. Вот наиболее полезные опции:

bash
./configure \
  --prefix=/usr/local/pgsql/16 \
  --with-openssl \
  --with-libxml \
  --with-libxslt \
  --with-icu \
  --with-systemd \
  --with-perl \
  --with-python \
  --with-tcl \
  --enable-debug \
  --enable-dtrace \
  --enable-nls \
  --with-pgport=5432

Ключевые параметры конфигурации:

  • --prefix: Директория для установки (рекомендую версионировать)
  • --with-openssl: Поддержка SSL-соединений
  • --with-libxml: Поддержка XML данных
  • --with-icu: Улучшенная работа с Unicode
  • --enable-debug: Отладочная информация (только для разработки)
  • --with-pgport: Порт по умолчанию

Компиляция PostgreSQL

После успешной конфигурации можно приступать к сборке:

bash
# Компиляция с использованием всех ядер процессора
make -j$(nproc)

# Запуск тестов (рекомендуется для production)
make check
Совет: Если сборка завершается с ошибкой, проверь вывод команды configure — там указаны недостающие зависимости. Также можешь посмотреть логи в config.log.

Установка и настройка PostgreSQL

bash
# Установка в указанную в --prefix директорию
sudo make install

# Установка дополнительных модулей
sudo make install-world

Создание системного пользователя

bash
# Создаём пользователя postgres
sudo groupadd postgres
sudo useradd -r -g postgres -s /bin/bash postgres

# Создаём директорию для данных
sudo mkdir -p /usr/local/pgsql/16/data
sudo chown -R postgres:postgres /usr/local/pgsql/16/data
sudo chmod 750 /usr/local/pgsql/16/data

Инициализация кластера баз данных

bash
# Переключаемся на пользователя postgres
sudo su - postgres

# Инициализируем БД
/usr/local/pgsql/16/bin/initdb \
  -D /usr/local/pgsql/16/data \
  --encoding=UTF8 \
  --locale=en_US.UTF-8 \
  --lc-collate=C \
  --lc-ctype=en_US.UTF-8

# Выходим из сессии postgres
exit

Настройка конфигурационных файлов

Отредактируй основные конфигурационные файлы PostgreSQL:

postgresql.conf (основные настройки):

config
# Адрес прослушивания
listen_addresses = 'localhost'

# Порт
port = 5432

# Настройки памяти
shared_buffers = 128MB
work_mem = 4MB
maintenance_work_mem = 64MB

# Настройки журналирования
logging_collector = on
log_directory = 'log'
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'

# Настройки производительности
max_connections = 100
shared_preload_libraries = ''

pg_hba.conf (управление доступом):

config
# TYPE  DATABASE        USER            ADDRESS                 METHOD
# Локальные соединения
local   all             all                                     peer

# IPv4 local connections
host    all             all             127.0.0.1/32            scram-sha-256

# IPv6 local connections
host    all             all             ::1/128                 scram-sha-256

# Доступ из сети (настрой под свои нужды)
# host    all             all             192.168.1.0/24          scram-sha-256

Запуск и управление службой PostgreSQL

Создание systemd сервиса

bash
sudo nano /etc/systemd/system/postgresql-16.service
config
[Unit]
Description=PostgreSQL 16 Database Server
After=network.target

[Service]
Type=notify
User=postgres
Group=postgres
Environment=PGDATA=/usr/local/pgsql/16/data
Environment=PGPORT=5432

ExecStart=/usr/local/pgsql/16/bin/postgres -D ${PGDATA}
ExecReload=/bin/kill -HUP $MAINPID
KillMode=mixed
KillSignal=SIGINT
TimeoutSec=0

[Install]
WantedBy=multi-user.target
bash
# Перезагружаем systemd
sudo systemctl daemon-reload

# Включаем автозагрузку
sudo systemctl enable postgresql-16

# Запускаем PostgreSQL
sudo systemctl start postgresql-16

# Проверяем статус
sudo systemctl status postgresql-16

Проверка работоспособности

bash
# Подключаемся к PostgreSQL
/usr/local/pgsql/16/bin/psql -U postgres -h localhost -p 5432

# В psql выполняем:
SELECT version();
\conninfo
\l

Настройка окружения и дополнительные шаги

Добавление в PATH

bash
# Добавляем в .bashrc или .profile
export PATH=/usr/local/pgsql/16/bin:$PATH
export PGDATA=/usr/local/pgsql/16/data
export PGPORT=5432

# Применяем изменения
source ~/.bashrc

Сравнение методов установки

Критерий Установка из исходников Установка из пакетов
Контроль над сборкой Полный Ограниченный
Оптимизация под железо Максимальная Универсальная
Сложность установки Высокая Низкая
Обновление версии Ручное Автоматическое
Поддержка Сообщество Пакетный менеджер

Частые проблемы и их решения

Проблема: Ошибка "configure: error: no acceptable C compiler found"

Решение: Установите пакет build-essential или "Development Tools":

bash
# Ubuntu/Debian
sudo apt install build-essential

# CentOS/RHEL
sudo yum groupinstall "Development Tools"

Проблема: Ошибка при запуске "Address already in use"

Решение: Порт 5432 уже занят. Измени порт или останови другой экземпляр PostgreSQL:

bash
# Проверяем, что слушает порт 5432
sudo ss -tulpn | grep :5432

# Изменяем порт в postgresql.conf
port = 5433

Проблема: Нет доступа к сокету

Решение: Проверь права доступа к директории с данными:

bash
sudo chown -R postgres:postgres /usr/local/pgsql/16/data
sudo chmod 750 /usr/local/pgsql/16/data

FAQ: Ответы на частые вопросы

Вопрос: Зачем устанавливать PostgreSQL из исходников, если есть пакеты?

Ответ: Установка из исходного кода даёт несколько преимуществ:

  • Возможность тонкой настройки параметров сборки
  • Оптимизация под конкретное железо (процессор, память)
  • Доступ к самым свежим версиям и патчам
  • Возможность отключения ненужных функций для уменьшения размера
  • Полный контроль над расположением файлов

Вопрос: Как обновить PostgreSQL, установленный из исходников?

Ответ: Процесс обновления включает:

  1. Резервное копирование всех баз данных
  2. Остановку текущего экземпляра
  3. Сборку новой версии в отдельную директорию
  4. Использование pg_upgrade для миграции данных
  5. Тщательное тестирование перед переключением

Вопрос: Какие параметры сборки наиболее важны для производительности?

Ответ: Ключевые параметры для оптимизации:

  • CFLAGS="-O2 -march=native" — оптимизация под конкретный процессор
  • --with-blocksize — размер блока данных (по умолчанию 8KB)
  • --with-wal-blocksize — размер блока WAL
  • --with-segsize — размер сегмента большого объекта
  • Отключение ненужных расширений для уменьшения размера

Заключение

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

Запомни ключевые моменты:

  • Всегда проверяй зависимости перед сборкой
  • Используй отдельного системного пользователя для безопасности
  • Тестируй сборку перед установкой в production
  • Документируй параметры конфигурации для будущих обновлений
  • Рассмотри использование менеджеров версий для управления конфигурацией

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

Поделиться:
Сохранить гайд? В закладки браузера