Как написать линтер для SQL-миграций

Привет! Меня зовут Алексей Сидоров, я Python-разработчик в команде краткосрочной аренды в Домклик. В этой статье разберём, как и зачем проверять код миграций схемы БД и как написать свой линтер.

Свободная объектно-реляционная СУБД

Привет! Меня зовут Алексей Сидоров, я Python-разработчик в команде краткосрочной аренды в Домклик. В этой статье разберём, как и зачем проверять код миграций схемы БД и как написать свой линтер.
Однажды при мониторинге мы обратили внимание на запрос, который занимал первое место по длительности: 40+ секунд на выполнение при 657 вызовах за день. Причина состояла в том, что из-за неточной статистики распределения данных выбирался неподходящий индекс. В статье расскажем о том, как с помощью параметра STATMULTIPLIER в СУБД Tantor Postgres этот проблемный запрос удалось ускорить примерно в миллион раз — до 0.042 миллисекунды, — просто повысив точность статистики без изменения кода или структуры базы данных.

Как только ты начинаешь углубляться в изучение баз данных, так сразу на горизонте возникают такие понятия как подзапросы, CTE, представления и временные таблицы. По опыту работы в университете заметил, что с этими темами у людей часто возникают проблемы и недопонимания. В частности больше всего путаницы вносит именно CTE.
Поэтому в этой статье я расскажу:
1. что такое CTE
2. зачем оно нужно
3. что такое рекурсивные СТЕ
4. чем СТЕ отличается от временных таблиц, представлений и подзапросов
5. как СТЕ может плохо сказаться на производительности
6. как использовать СTE в самом народном фреймворке Django
Использует SELECT со звёздочкой Макс - Lead Backend и автор YouTube-канала PyLounge. Поехали!

Продолжаем публиковать некоторые детали проектов по миграции больших баз данных 1С с MS SQL Server на PostgreSQL. В прошлый раз речь шла о миграции только одной 10+ Тб базы данных 1С с MS SQL на PostgreSQL. Сегодня речь пойдет о проекте миграции на PostgreSQL сразу сорока с лишним распределенных информационных систем 1C с базами размером от 50 Гб до 2 Тб каждая.

Началось с простого: сделать универсальное ядро для Telegram-ботов на Python и YAML-конфигах. Сейчас Coreness — это мультитенантная платформа, где боты и AI-агенты создаются декларативно, работают с RAG, а весь код написан через вайб-кодинг с помощью LLM.
Это рассказ о том, как в одиночку за пару месяцев удалось пройти путь от Clean Architecture (которая не зашла) до гибридного микса архитектур, от SQLite до production-инфраструктуры с PostgreSQL и десятками ботов в бою, и почему AI-ассистенты — это не магия, а инструмент, требующий совершенно новых навыков.

Начинаем новый цикл статей с обзором изменений 19 версии. И первая статья о событиях летнего июльского коммитфеста прошлого года.

Осторожно, спойлеры! Не читайте, пока хотите решить задачу самостоятельно.
В этой челлендж-серии статей, начатой с прошлогоднего эвента, попробуем использовать PostgreSQL как среду для решения задач Advent of Code 2025.
Возможно, SQL не самый подходящий для этого язык, зато мы рассмотрим его различные возможности, о которых вы могли и не подозревать.

После 10 лет внедрения BI-систем (Qlik Sense, Power BI, Data Lens) я понял одну вещь: дашборд — это не решение. Это данные для решения. А между данными и решением — пропасть, которую преодолевает человек.
В этой статье покажу, как построил RAG-систему с чат-интерфейсом для базы из 600 000 записей техники из Федресурса. Без философии — только архитектура, код и грабли.

Как сделать надёжную очередь задач без Rabbit/Kafka, используя только Postgres? Разбираю боевой паттерн: FOR NO KEY UPDATE SKIP LOCKED для конкурентного забора, lease/heartbeat для возврата задач после падений и backpressure, чтобы воркеры не съели память.

В PostgreSQL и Oracle Database команда UPDATE, столкнувшаяся с заблокированной строкой, ведёт себя по-разному. В статье рассматривается, как выполняется UPDATE в этих базах данных. Это может быть полезно при миграции кода приложения мжду этими базами данных.
В статье разбирается практический подход к мониторингу managed PostgreSQL в Yandex Cloud с использованием экспортёра pgSCV. Показано, как выстроить сбор метрик так, чтобы он не создавал дополнительной нагрузки на базу данных, масштабировался вместе с инфраструктурой и оставался управляемым.

Часто при замедлении работы базы данных первым решением кажется увеличение вычислительных ресурсов: больше ядер, памяти, быстрые диски. Однако существует и другой, более экономичный путь — заглянуть глубже, на уровень операционной системы, управляющей этими ресурсами.
Данная статья — это практический разбор реального кейса, где скрупулёзная настройка параметров подсистемы ввода-вывода, кэширования и планировщика задач Linux позволила поднять производительность PostgreSQL на впечатляющие 65%. Без замены железа, без увеличения лицензий, только за счёт грамотной оптимизации «фундамента», на котором работает СУБД.
GitHub - Комплекс pg_expecto для статистического анализа производительности и нагрузочного тестирования СУБД PostgreSQL

За 5 лет работы в B2B и B2C сегментах у телеком-провайдеров я столкнулся с одной из проблем: абоненты годами сидят на архивных дорогих тарифах или пользуются услугами операторов, которые не идут на уступки, не снижают цены на тарифы, пользователи просто не знают, что в их же доме есть альтернативные провайдеры с тарифами более выгодными для них.
Я решил объединить свой опыт в телекоме с навыками в программировании. Так появилась идея по парсенгу тарифов. Цель — создать инструмент, который автоматически мониторит провайдеров, избавляя пользователей от ручного сравнения и помогая им находить оптимальные условия по тарифу.
Сейчас я работаю аналитиком БД, параллельно изучаю архитектуру, построение данных. Решил начать проект с проектирования структуру на PostgreSQL по схеме "Звезда". Таблицей фактов у меня будет таблица со связью города с провайдером, таблицы измерений – таблица с информацией о тарифах, городами и провайдерами.

Существует опасное заблуждение, что «ванильный» Open Source — это серебряная пуля для энтерпрайза. Однако жесткий краш-тест последних лет показал: когда уходят привычные гиганты вроде Oracle, чистый Postgres превращается в тыкву под нагрузками крупного бизнеса. Руководитель отдела технического консалтинга Postgres Professional Марк Ривкин делится своим авторским видением того, почему нам приходится заново изобретать велосипеды, дописывая миллионы строк кода в ядро, и почему будущее за конвергентными системами. Дисклеймер: это частный взгляд эксперта.
Привет! Хочу рассказать о своем новом небольшом проекте - pg-status. Это очень легкий и производительный микросервис, который помогает определять статус хостов postgresql. В первую очередь его задача - помочь вашему backend найти живого мастера и достаточно синхронную реплику.

Привет!
Если вы администрируете PostgreSQL или хотя бы раз пытались понять, почему ваш отчёт выполняется полчаса, то наверняка натыкались на интересную настройку work_mem. Одна строчка в конфиге, а может превратить черепашку в гепарда. Или наоборот, положить сервер.
Здесь я представляю результаты работы над первым шагом к внедрению временных таблиц в схему параллельного выполнения запросов в PostgreSQL - тестирование последовательной записи и чтения temp buffers. В системный каталог PostgreSQL добавлены функции измерения операций сброса буферов, и проведены тесты. Для целей оптимизатора выполнена оценка коэффициента стоимости сброса буфера временной таблицы на диск относительно уже существующего DEFAULT_SEQ_PAGE_COST. Выполнена оценка стоимости простого обхода temp buffers (dry-run). Измерения показывают, что последовательная запись примерно на 30% медленнее чтения. На основе этих результатов предложена формула оценки стоимости.

В мире PostgreSQL, как и в автоспорте, не существует единой идеальной стратегии для всех трасс. Выбор интервала контрольных точек (checkpoint_timeout) — это пит-стоп: можно заезжать часто для максимальной скорости на прямых, но рискуя потерять время на самом заезде, или реже — для стабильного и предсказуемого ритма всей гонки. Всё зависит от типа «трассы» — характера нагрузки на вашу базу данных.
GitHub - Комплекс pg_expecto для статистического анализа производительности и нагрузочного тестирования СУБД PostgreSQL

Ivory теперь поддерживает LDAP и OIDC/SSO наряду с базовой аутентификацией, что значительно упрощает интеграцию с существующей инфраструктурой идентификации. Для каждого провайдера предусмотрены возможности тестирования подключения, а пользователям можно настроить несколько вариантов входа.
Добавлена полная система разрешений для контроля доступа к определенным кластерам, запросам и настройкам. Новый интерфейс управления разрешениями позволяет администраторам предоставлять и отзывать доступ, а пользователи могут запрашивать необходимые им разрешения. Это делает Ivory подходящим для больших команд с разными уровнями доступа.

Postgres Pro Enterprise 18.1.1
До Нового Года успела выйти 18-я версия Postgres Pro Enterprise - Postgres Pro Enterprise 18.1.1. Версии Postgres Pro Standard 18.1.1 и - до неё - Postgres Pro Standard 18.0.1 следовали за соответственно. А - как видно из номера - Postgres Pro Enterprise 18.1.1 - перепрыгнула через ступеньку. Поэтому, если будет желание отследить изменения, унаследованные от Standard и PostgreSQL, надо сравнивать сразу с 2 версиями каждой. Мы же здесь не будем фокусироваться на формальностях и просто приведём (неполный, конечно - полный слишком велик для нашего жанра) список нового.
Добавлена возможность создавать таблицы, которые разделяются на секции при помощи внешнего ключа. Внешний ключ используется как ссылка на родительскую секционированную таблицу и определяется в предложении PARTITION BY REFERENCE.
Обновлены модули, в том числе BiHA. В ней много важных изменений: