- Home »

Установка PostgreSQL на Ubuntu 24 — быстрый старт
Готовишь сервер под новый проект? Тогда точно не обойдёшься без хорошей базы данных. PostgreSQL — это тот самый зверь, который может всё: от простых сайтов до энтерпрайзных монстров. В этой статье разберём, как быстро и правильно поставить PostgreSQL на Ubuntu 24. Никаких лишних телодвижений — только проверенные команды и практические советы от сисадмина с пятилетним стажем мучений с базами данных.
Зачем вообще PostgreSQL?
Честно говоря, если ты читаешь эту статью, то скорее всего уже знаешь ответ. Но на всякий случай — PostgreSQL не просто база данных. Это целая экосистема с JSON-поддержкой, расширениями, триггерами и кучей других плюшек. В отличие от MySQL, здесь всё работает как надо из коробки.
Главные преимущества:
- ACID-совместимость без костылей
- Поддержка JSON/JSONB (привет, NoSQL)
- Расширения — от PostGIS до TimescaleDB
- Открытый код и активное сообщество
- Отличная производительность на больших данных
Как это работает?
PostgreSQL использует архитектуру процессов (в отличие от MySQL с потоками). Каждое соединение = отдельный процесс. Звучит ресурсоёмко, но на практике это даёт стабильность и изоляцию. Если один запрос упадёт, остальные продолжат работать.
Основные компоненты:
- Postmaster — главный процесс, управляет подключениями
- Backend processes — обрабатывают SQL-запросы
- Shared memory — кэш данных и буферы
- WAL (Write-Ahead Logging) — журнал изменений для надёжности
Быстрая установка — пошаговая инструкция
Окей, хватит теории. Поехали ставить. Предполагаю, что у тебя есть свежий VPS с Ubuntu 24 или выделенный сервер.
Шаг 1: Обновляем систему
sudo apt update && sudo apt upgrade -y
Шаг 2: Устанавливаем PostgreSQL
sudo apt install postgresql postgresql-contrib -y
Флаг postgresql-contrib
добавляет кучу полезных расширений. Поверь, пригодится.
Шаг 3: Проверяем статус службы
sudo systemctl status postgresql
Если видишь “active (running)” — всё окей. Если нет:
sudo systemctl start postgresql
sudo systemctl enable postgresql
Шаг 4: Настраиваем пользователя
По умолчанию PostgreSQL создаёт пользователя postgres
. Переключаемся на него:
sudo -u postgres psql
Создаём пользователя для своего проекта:
CREATE USER myuser WITH PASSWORD 'mypassword';
CREATE DATABASE mydatabase OWNER myuser;
GRANT ALL PRIVILEGES ON DATABASE mydatabase TO myuser;
\q
Базовая настройка производительности
Установка — это только полдела. Теперь нужно настроить PostgreSQL под твой сервер. Основной конфиг лежит в /etc/postgresql/16/main/postgresql.conf
.
Ключевые параметры
sudo nano /etc/postgresql/16/main/postgresql.conf
Что меняем (на примере сервера с 4GB RAM):
# Память
shared_buffers = 1GB # 25% от RAM
effective_cache_size = 3GB # 75% от RAM
work_mem = 4MB # Для каждой операции
maintenance_work_mem = 256MB # Для VACUUM, CREATE INDEX
# Логирование
log_statement = 'all' # Логируем все запросы (для дебага)
log_duration = on # Время выполнения запросов
log_line_prefix = '%t [%p]: [%l-1] user=%u,db=%d,app=%a,client=%h '
# Соединения
max_connections = 100 # Не ставь слишком много
Настройка доступа
Редактируем pg_hba.conf
:
sudo nano /etc/postgresql/16/main/pg_hba.conf
Добавляем строку для удалённого доступа:
host all all 0.0.0.0/0 md5
Внимание! Это небезопасно для продакшена. Используй конкретные IP или VPN.
Перезапускаем:
sudo systemctl restart postgresql
Практические примеры и кейсы
Кейс 1: Веб-приложение на Django
Создаём базу для Django-проекта:
sudo -u postgres psql
CREATE DATABASE django_app;
CREATE USER django_user WITH PASSWORD 'super_secret_password';
GRANT ALL PRIVILEGES ON DATABASE django_app TO django_user;
ALTER USER django_user CREATEDB; -- Для тестов
\q
Кейс 2: Аналитическая база
Для аналитики нужны другие настройки:
# В postgresql.conf
shared_buffers = 2GB
work_mem = 256MB # Больше для сложных запросов
random_page_cost = 1.1 # Для SSD
effective_io_concurrency = 200 # Для SSD
Сравнение настроек по типам нагрузки
Параметр | OLTP (веб-сайты) | OLAP (аналитика) | Смешанная нагрузка |
---|---|---|---|
shared_buffers | 25% RAM | 25% RAM | 25% RAM |
work_mem | 4MB | 256MB | 32MB |
max_connections | 200 | 50 | 100 |
random_page_cost | 1.1 (SSD) | 1.1 (SSD) | 1.1 (SSD) |
Альтернативные способы установки
Официальный APT репозиторий
Хочешь самую свежую версию? Используй официальный репозиторий:
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt update
sudo apt install postgresql-16 postgresql-contrib-16
Docker (для разработки)
docker run --name postgres-dev \
-e POSTGRES_PASSWORD=mypassword \
-e POSTGRES_DB=myapp \
-p 5432:5432 \
-d postgres:16
Расширения и интеграция
Полезные расширения
Подключаем в psql:
CREATE EXTENSION IF NOT EXISTS "uuid-ossp"; -- UUID генерация
CREATE EXTENSION IF NOT EXISTS "pg_trgm"; -- Нечёткий поиск
CREATE EXTENSION IF NOT EXISTS "hstore"; -- Ключ-значение
CREATE EXTENSION IF NOT EXISTS "pg_stat_statements"; -- Статистика запросов
Мониторинг и автоматизация
Скрипт для мониторинга:
#!/bin/bash
# check_postgres.sh
DB_HOST="localhost"
DB_NAME="mydatabase"
DB_USER="myuser"
# Проверка подключения
if ! psql -h $DB_HOST -U $DB_USER -d $DB_NAME -c "SELECT 1;" > /dev/null 2>&1; then
echo "CRITICAL: PostgreSQL недоступен"
exit 2
fi
# Проверка медленных запросов
SLOW_QUERIES=$(psql -h $DB_HOST -U $DB_USER -d $DB_NAME -t -c "SELECT count(*) FROM pg_stat_statements WHERE mean_time > 1000;")
if [ "$SLOW_QUERIES" -gt 10 ]; then
echo "WARNING: Найдено $SLOW_QUERIES медленных запросов"
fi
echo "OK: PostgreSQL работает нормально"
Сравнение с конкурентами
Критерий | PostgreSQL | MySQL | MariaDB |
---|---|---|---|
ACID-совместимость | Полная | Только InnoDB | Только InnoDB |
JSON поддержка | Отличная | Базовая | Хорошая |
Расширения | Много | Мало | Средне |
Скорость чтения | Хорошая | Отличная | Отличная |
Скорость записи | Отличная | Хорошая | Хорошая |
Интересные факты и нестандартные применения
Знал ли ты, что PostgreSQL можно использовать не только как базу данных?
- Очередь задач — с расширением pg_partman можно сделать эффективную очередь
- Полнотекстовый поиск — встроенная альтернатива Elasticsearch для небольших проектов
- Временные ряды — с TimescaleDB конкурирует с InfluxDB
- Геоданные — PostGIS делает из PostgreSQL полноценную GIS-систему
Нестандартный пример: API на чистом SQL
С расширением PostgREST можно создать REST API без бэкенда:
-- Создаём представление
CREATE VIEW api_users AS
SELECT id, name, email, created_at
FROM users
WHERE active = true;
-- Настраиваем права
GRANT SELECT ON api_users TO web_anon;
Автоматизация и скрипты
Скрипт автоматического бэкапа
#!/bin/bash
# backup_postgres.sh
DB_NAME="mydatabase"
DB_USER="myuser"
BACKUP_DIR="/backups/postgres"
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p $BACKUP_DIR
# Создаём дамп
pg_dump -h localhost -U $DB_USER -d $DB_NAME | gzip > $BACKUP_DIR/backup_${DATE}.sql.gz
# Удаляем старые бэкапы (старше 7 дней)
find $BACKUP_DIR -name "backup_*.sql.gz" -mtime +7 -delete
echo "Бэкап создан: backup_${DATE}.sql.gz"
Мониторинг с помощью cron
# Добавляем в crontab
0 2 * * * /usr/local/bin/backup_postgres.sh
*/5 * * * * /usr/local/bin/check_postgres.sh
Типичные ошибки и как их избежать
Ошибка 1: Слишком много соединений
FATAL: sorry, too many clients already
Решение: Настройка connection pooling с PgBouncer:
sudo apt install pgbouncer -y
Ошибка 2: Медленные запросы
Включаем логирование медленных запросов:
log_min_duration_statement = 1000 # Логируем запросы > 1 секунды
Ошибка 3: Нехватка shared_buffers
Симптомы: высокая нагрузка на диск. Увеличиваем буферы, но не больше 40% от RAM.
Полезные ссылки
- Официальная документация PostgreSQL
- PGTune — автоматическая настройка конфигурации
- Исходный код PostgreSQL на GitHub
Заключение и рекомендации
PostgreSQL — это выбор профессионалов. Да, он может показаться сложнее MySQL на первый взгляд, но это окупается стабильностью и возможностями. После установки обязательно:
- Настрой мониторинг и алерты
- Настрой автоматические бэкапы
- Изучи EXPLAIN для оптимизации запросов
- Используй connection pooling для высоконагруженных приложений
Используй PostgreSQL для:
- Веб-приложений с сложной логикой
- Аналитических систем
- Проектов, где важна целостность данных
- Приложений с JSON-данными
Не используй для:
- Простых блогов (overheal)
- Проектов с очень высокой нагрузкой на чтение (лучше MySQL + репликация)
- Embedded-приложений (лучше SQLite)
Главное — не бойся экспериментировать. PostgreSQL прощает многие ошибки новичков, а сообщество всегда готово помочь. Удачи в настройке!
В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.
Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.