TGViewer
SQL Portal | Базы Данных SQL Portal | Базы Данных @sqlportal · 13.7K subscribers
Post #2050 1.01K
pg_cron — это расширение PostgreSQL, которое запускает задачи по расписанию прямо внутри базы, используя стандартный синтаксис cron. Если ты пишешь фоновые джобы, которые в основном сводятся к SQL-запросам, проще отдать это Postgres’у через pg_cron. Получается проще, стабильнее и без внешнего планировщика.

Настройка
В managed PostgreSQL (например, Crunchy Bridge и похожие провайдеры) pg_cron обычно уже доступен.
Если поднимаешь Postgres сам, ставишь пакет:
sudo apt install postgresql-18-cron


Дальше подключаешь расширение при старте сервера через postgresql.conf:
shared_preload_libraries = 'pg_cron'
cron.database_name = 'postgres'


shared_preload_libraries
обязателен — без него расширение не загрузится.

Как работает
По умолчанию задачи выполняются в той базе, где создано расширение.
Можно явно указать другую базу через cron.schedule_in_database.
Задачи выполняются от имени роли, которая их создала. Значит, права на таблицы и команды берутся из этой роли.

Создание задач
Основная функция — cron.schedule. У неё несколько перегрузок, поведение зависит от количества аргументов.

Типичный вариант из трёх частей:
имя задачи
cron-расписание
SQL-команда

Пример:
SELECT cron.schedule(
'nightly_vacuum',
'0 3 * * *',
'VACUUM ANALYZE big_table'
);


Управление и мониторинг
Список задач лежит в cron.job.

Там есть:
имя
расписание
SQL
активна ли задача

История запусков — cron.job_run_details.

Там видно:
время старта
длительность
успех или ошибка

Повторов при ошибке нет. Задача просто логируется и ждёт следующего запуска.

Частые кейсы
чистка старых логов
nightly VACUUM для горячих таблиц
агрегация метрик по часам
перенос старых строк в архив
обновление materialized views

Реже используемые сценарии
Иногда pg_cron используют не только для базы:
батчинг запросов к внешним API (в связке с http)
ETL-процессы и выгрузка в data warehouse (например, через pg_lake)
прогрев кэша через pg_prewarm перед пиками нагрузки

👉 @SQLPortal
  • ❤ 2
  • 👍 1
More from @sqlportal
  1. Oct 7, 2026Линтер и автоформаттер для SQL Бесплатный инструмент с открытым исходным кодом, который пр…
  2. Oct 6, 2026Знатоки SQL и те, кто только учится, вопрос к вам Какой из этих запросов вы выберете для в…
  3. Oct 6, 2026CSRF ≠ XSS ≠ SQL-инъекция. Все три уязвимости безопасности, но механизмы атак у них разные…
  4. Oct 5, 2026Знатоки SQL: в каких случаях стоит использовать код A, а в каких — код B? 👉 @SQLPortal
  5. Oct 5, 2026Один из лучших ресурсов по производительности SQL: use-the-index-luke.com 👉 @SQLPortal
  6. Oct 4, 2026Microsoft представила обновления SQL на SQLCon Barcelona 2026 Среди главных направлений —…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →