Представь, что тебе нужна специфичная версия PostgreSQL с особыми параметрами сборки, или ты хочешь собрать СУБД с максимальной оптимизацией под своё железо. Установка из пакетного менеджера не даёт такой гибкости. Давай разберём, как выполнить установку PostgreSQL из исходников — это даст полный контроль над конфигурацией и процессом сборки.
Подготовка системы к установке PostgreSQL
Перед компиляцией PostgreSQL из исходного кода необходимо установить зависимости для сборки. Без них процесс завершится ошибкой.
Установка зависимостей для сборки
В зависимости от дистрибутива Linux, команды будут отличаться:
Для Debian/Ubuntu:
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:
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, которую хочешь установить. Рекомендую использовать стабильную версию из официального сайта.
# Создаём рабочую директорию
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 с нужными параметрами. Вот наиболее полезные опции:
./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
После успешной конфигурации можно приступать к сборке:
# Компиляция с использованием всех ядер процессора
make -j$(nproc)
# Запуск тестов (рекомендуется для production)
make check
Установка и настройка PostgreSQL
# Установка в указанную в --prefix директорию
sudo make install
# Установка дополнительных модулей
sudo make install-world
Создание системного пользователя
# Создаём пользователя 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
Инициализация кластера баз данных
# Переключаемся на пользователя 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 (основные настройки):
# Адрес прослушивания
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 (управление доступом):
# 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 сервиса
sudo nano /etc/systemd/system/postgresql-16.service
[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
# Перезагружаем systemd
sudo systemctl daemon-reload
# Включаем автозагрузку
sudo systemctl enable postgresql-16
# Запускаем PostgreSQL
sudo systemctl start postgresql-16
# Проверяем статус
sudo systemctl status postgresql-16
Проверка работоспособности
# Подключаемся к PostgreSQL
/usr/local/pgsql/16/bin/psql -U postgres -h localhost -p 5432
# В psql выполняем:
SELECT version();
\conninfo
\l
Настройка окружения и дополнительные шаги
Добавление в PATH
# Добавляем в .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":
# Ubuntu/Debian
sudo apt install build-essential
# CentOS/RHEL
sudo yum groupinstall "Development Tools"
Проблема: Ошибка при запуске "Address already in use"
Решение: Порт 5432 уже занят. Измени порт или останови другой экземпляр PostgreSQL:
# Проверяем, что слушает порт 5432
sudo ss -tulpn | grep :5432
# Изменяем порт в postgresql.conf
port = 5433
Проблема: Нет доступа к сокету
Решение: Проверь права доступа к директории с данными:
sudo chown -R postgres:postgres /usr/local/pgsql/16/data
sudo chmod 750 /usr/local/pgsql/16/data
FAQ: Ответы на частые вопросы
Вопрос: Зачем устанавливать PostgreSQL из исходников, если есть пакеты?
Ответ: Установка из исходного кода даёт несколько преимуществ:
- Возможность тонкой настройки параметров сборки
- Оптимизация под конкретное железо (процессор, память)
- Доступ к самым свежим версиям и патчам
- Возможность отключения ненужных функций для уменьшения размера
- Полный контроль над расположением файлов
Вопрос: Как обновить PostgreSQL, установленный из исходников?
Ответ: Процесс обновления включает:
- Резервное копирование всех баз данных
- Остановку текущего экземпляра
- Сборку новой версии в отдельную директорию
- Использование pg_upgrade для миграции данных
- Тщательное тестирование перед переключением
Вопрос: Какие параметры сборки наиболее важны для производительности?
Ответ: Ключевые параметры для оптимизации:
- CFLAGS="-O2 -march=native" — оптимизация под конкретный процессор
- --with-blocksize — размер блока данных (по умолчанию 8KB)
- --with-wal-blocksize — размер блока WAL
- --with-segsize — размер сегмента большого объекта
- Отключение ненужных расширений для уменьшения размера
Заключение
Установка PostgreSQL из исходников — это мощный инструмент для опытных администраторов и разработчиков, которым нужен полный контроль над своей СУБД. Хотя процесс требует больше времени и знаний, он окупается максимальной производительностью и гибкостью конфигурации.
Запомни ключевые моменты:
- Всегда проверяй зависимости перед сборкой
- Используй отдельного системного пользователя для безопасности
- Тестируй сборку перед установкой в production
- Документируй параметры конфигурации для будущих обновлений
- Рассмотри использование менеджеров версий для управления конфигурацией
Теперь у тебя есть полностью настроенный PostgreSQL, собранный именно под твои требования. Это основа для построения высоконагруженных и отказоустойчивых систем.