Дайджесты новостей
Студийный Still Life надежного инфраструктурного стека PostgreSQL: компоненты резервного копирования pgBackRest, API-шлюз PostgREST и очередь сообщений pgmq.

Инфраструктурный стек PostgreSQL: pgBackRest 2.60, PostgREST 16.5 и pgmq 1.13.1

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

В сегодняшнем обзоре мы разбираем новые версии трех фундаментальных утилит инфраструктурного контура: инструмента создания резервных копий pgBackRest 2.60, шлюза PostgREST 16.5 и легковесной очереди pgmq 1.13.1.

Давай посмотрим, какие риски закрывают эти обновления в боевых средах.

pgBackRest 2.60

Утилита pgBackRest по праву считается золотым стандартом резервного копирования PostgreSQL в Enterprise-сегменте благодаря сжатию на лету, многопоточной передаче и проверке контрольных сумм страниц данных (Page Checksums).

В версии 2.60 добавлено критически важное поведение: автоматическая остановка восстановления при обнаружении невалидной контрольной суммы страницы:

# pgbackrest.conf — конфигурация восстановления
[global]
repo1-type=s3
repo1-s3-bucket=corp-pg-backups
repo1-s3-endpoint=s3.storage.corp.local

[app-cluster]
pg1-path=/var/lib/postgresql/19/main
# В версии 2.60: принудительный стоп при ошибке контрольной суммы блока
checksum-page-error=y

Раньше в редких случаях аппаратных сбоев дисковой подсистемы процесс восстановления мог пропустить поврежденный блок, уведомив о нем только предупреждением в глубине лога. База поднималась, но при первом обращении к битой странице падала в панику. Теперь восстановление жестко прерывается с ясным указанием поврежденного блока, предотвращая запуск неконсистентного кластера в прод.

PostgREST 16.5

Шлюз PostgREST превращает схему базы данных PostgreSQL в полнофункциональный RESTful API сервер без написания единой строчки бэкенд-кода. Запросы клиентов транслируются напрямую в SQL-выражения, а права доступа проверяются через встроенные роли и политики безопасности на уровне строк (Row-Level Security, RLS).

В релизе 16.5 инженеры устранили уязвимость на стороне клиента:

  • Суть проблемы: при определенных конфигурациях обратного прокси злоумышленник мог манипулировать HTTP-заголовками Prefer: return=representation и заголовками контекста транзакций, вызывая нежелательные побочные эффекты при пакетных вставках.
  • Решение: ужесточена валидация входных HTTP-заголовков, улучшена изоляция контекста ролей и исправлена ошибка при парсинге сложных JSON-фильтров.

pgmq 1.13.1

Когда проекту требуется простая очередь сообщений (Message Queue), первой мыслью часто бывает поднять RabbitMQ или Kafka. Но для задач умеренной нагрузки (отправка писем, генерация превью, отложенные задачи) разворачивать отдельный брокер сообщений — лишний инфраструктурный оверхед.

Модуль pgmq превращает PostgreSQL в надежную очередь сообщений с гарантией доставки «как минимум один раз» (at-least-once), поддержкой времени невидимости сообщений (visibility timeout) и архивацией.

В релизе 1.13.1 мейнтейнеры сосредоточились на безопасности и разграничении прав:

-- Создание очереди сообщений в схеме pgmq
SELECT pgmq.create('user_notifications');

-- Отправка JSON-сообщения с задержкой 10 секунд
SELECT * FROM pgmq.send('user_notifications', '{"user_id": 481516, "event": "welcome_email"}', 10);

-- Чтение сообщения рабочим воркером с блокировкой видимости на 30 секунд
SELECT * FROM pgmq.read('user_notifications', 30, 1);

-- Подтверждение и удаление обработанного сообщения
SELECT pgmq.delete('user_notifications', 1);

Главное новшество 1.13.1: изоляция привилегий. Ранее функции создания очередей требовали прав суперпользователя. Теперь операции разделены: обычный сервисный аккаунт приложения может работать с очередью без риска скомпрометировать системные таблицы базы данных.

Инфраструктурный вывод

Связка надежных бэкапов в pgBackRest 2.60, защищенного шлюза PostgREST 16.5 и изолированных очередей в pgmq 1.13.1 формирует надежный каркас для безотказной работы проектов любого масштаба.