Home » Установка PostgreSQL на Ubuntu 24 — быстрый старт
Установка PostgreSQL на Ubuntu 24 — быстрый старт

Установка 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 — это выбор профессионалов. Да, он может показаться сложнее MySQL на первый взгляд, но это окупается стабильностью и возможностями. После установки обязательно:

  • Настрой мониторинг и алерты
  • Настрой автоматические бэкапы
  • Изучи EXPLAIN для оптимизации запросов
  • Используй connection pooling для высоконагруженных приложений

Используй PostgreSQL для:

  • Веб-приложений с сложной логикой
  • Аналитических систем
  • Проектов, где важна целостность данных
  • Приложений с JSON-данными

Не используй для:

  • Простых блогов (overheal)
  • Проектов с очень высокой нагрузкой на чтение (лучше MySQL + репликация)
  • Embedded-приложений (лучше SQLite)

Главное — не бойся экспериментировать. PostgreSQL прощает многие ошибки новичков, а сообщество всегда готово помочь. Удачи в настройке!


В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.

Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.

Leave a reply

Your email address will not be published. Required fields are marked