Обновить
64K+

PostgreSQL *

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

146,08
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности

PostgreSQL. ltree. JPA. Использование в микросервисах

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели8.7K

В жизни разработчика периодически возникает задача каким-либо образом сохранить что-то древообразное. Это может быть оргструктура компании,   каталог товаров, генеалогическое дерево и т.п.

Читать далее

Монолит с отчётами на 30 секунд: как я переписал архитектуру и что из этого вышло

Уровень сложностиСредний
Время на прочтение4 мин
Охват и читатели8.7K

Пришёл в проект, там легаси погоняет легаси. Спагетти такие что уже в рот лезут. Отчёты по филиалам открывались 30 секунд. Команда реально боялась нажать кнопку в рабочее время, а вдруг база ляжет.

Это была система управления розничной сетью: несколько филиалов, сотни тысяч записей о заказах, ежедневные отчёты по выручке и остаткам. На бумаге ничего страшного. На практике монолит на Django где бизнес-логика размазана по контроллерам так, что поменяй что-то одно и сломается три другого.

Первое, что я сделал: открыл EXPLAIN ANALYZE.

Как отчёты ускорились в 20 раз

EXPLAIN Prettier или пост-процессинг планов запросов в Postgres

Уровень сложностиПростой
Время на прочтение8 мин
Охват и читатели13K

Эта история началась с подаренной коллегой своей новой книги: читая Jimmy Angelakos’ «PostgreSQL Mistakes and How to Avoid Them», я осознал один напрягающий меня факт — в Postgres команда EXPLAIN выдаёт слишком много информации. И примеры, которые автор обычно приводит, рассматривая тот или иной аспект систем баз данных, усложняют разбор задачи и рассеивают внимание. Так и родилась идея постфильтра для эксплейнов — чтобы сделать их более читабельными и проблемно-ориентированными.

Читать далее

Вышло 12-е издание книги «Postgres. Первое знакомство»

Уровень сложностиПростой
Время на прочтение3 мин
Охват и читатели11K

Команда экспертов Postgres Professional — Павел Лузанов, Егор Рогов и Игорь Лёвшин — представила обновлённое 12-е издание своего бестселлера «Postgres. Первое знакомство». Главная новость: книга актуализирована под возможности новейшей 18-й версии PostgreSQL.

Это небольшое, но ёмкое руководство призвано максимально быстро и комфортно погрузить читателя в работу с самой продвинутой СУБД с открытым кодом.

Читать далее

Осваиваем replication slots в Postgres: как предотвратить разрастание WAL и другие проблемы в продакшене

Уровень сложностиСредний
Время на прочтение16 мин
Охват и читатели8.1K

Логическая репликация в Postgres редко ломает прод внезапно — чаще она долго и методично копит проблему, пока replication slot удерживает всё больше WAL, потребитель отстаёт, а свободное место на диске начинает таять. В этой статье разбирается именно такая зона риска: как устроена работа replication slots, почему одних базовых настроек здесь недостаточно и какие практики реально помогают держать под контролем WAL, публикации, heartbeats, failover и мониторинг. Материал особенно полезен тем, кто работает с CDC, Debezium и production-инстансами Postgres, где цена ошибки измеряется уже не теорией, а стабильностью системы.

Разбор PostgreSQL

Почему PostgreSQL не использует ваш индекс

Уровень сложностиСредний
Время на прочтение9 мин
Охват и читатели6.2K

Вторая часть серии по PostgreSQL из моих внутренних докладов. В этот раз — индексы: откуда берётся cost в EXPLAIN и почему это «попугаи», а не миллисекунды. Почему PostgreSQL игнорирует ваш индекс при высоком покрытии таблицы. Как физическое расположение данных на диске влияет на скорость даже при наличии индекса. Плюс GiST для нечёткого поиска с триграммами, GIN для полнотекстового поиска и EXCLUDE constraints для задач типа бронирования. Всё на примере таблицы с 4 миллионами строк.

Читать далее

Парсинг тарифов интернета и ТВ. Selenium + BeautifulSoup: трудности динамического контента и защиты от ботов

Уровень сложностиСредний
Время на прочтение4 мин
Охват и читатели6.9K

На этапе тестирования я отобрал 6 городов (Москва, Санкт‑Петербург, Новосибирск, Екатеринбург, Казань, Красноярск) и двух крупнейших провайдеров России — Ростелеком и Дом.ру. В планах масштабирование на большее количество городов и операторов.

Для парсинга тарифов у провайдеров применял связку Python + Selenium + BeautifulSoup, через хранимую процедуру складывал полученные данные в базу PostgreSQL.

Читать далее

Бинарная, тернарная или всё-таки кватернарная логика в функциях Postgres?

Уровень сложностиСложный
Время на прочтение11 мин
Охват и читатели5.2K

Будучи поклонником идеи Айзека Азимова о коллаборации C/Si форм жизни, я провёл эксперимент и сгенерировал данный текст автоматически, AI агентом, по контексту, сформированному в процессе разработки новой фичи оптимизатора Postgres и расследования проблемного corner case, который время от времени завершался с runtime-ошибкой. Это первый опыт подобной совместной работы и проба пера, поэтому возможны шероховатости. Однако сама проблема и вариант решения для Postgres валидированы вручную. Любая, даже самая жёсткая критика, приветствуется.

Читать далее

Записки оптимизатора 1С (ч.16). Риски падения Postgres: потребление и высвобождение памяти процессами postgres

Время на прочтение9 мин
Охват и читатели7.1K

Статья родилась в ходе наблюдения за одной из систем на Postgres, что у нас на поддержке. Результаты наблюдения несколько удивили, поэтому делюсь, ибо причинно-следственные связи далеко не очевидны.

Триггером к изучению, можно сказать, даже к расследованию, послужило событие, когда однажды утром сервер PG завалился, потому что процессы postgres заняли всю память.

Читать далее

Если ваш админ — самурай или «обнять и плакать»

Уровень сложностиПростой
Время на прочтение11 мин
Охват и читатели9K

В статье дан обзор одного из докладов конференции PgConf, которая прошла 23-24 марта 2026 года, Андрея Билле, главного инженера компании Pоstgres Prоfessiоnal. Название доклада: «Если ваш админ самурай или история о восстановлении очень нужных данных».

Читать далее

Health Score для PostgreSQL: один показатель вместо 150 метрик

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели11K

Мониторинг PostgreSQL сломан: 150 метрик в pg_stat_*, и ни одна не отвечает на вопрос «база здорова?». В статье — как устроен Health Score: единое число от 0 до 100, которое агрегирует состояние базы и заменяет 30 дашбордов Grafana.

Читать далее

Книга «PostgreSQL 16. Оптимизация запросов»: учимся читать мысли планировщика

Уровень сложностиПростой
Время на прочтение4 мин
Охват и читатели11K

Медленный запрос — это не приговор, это задача со своим решением. Но найти его невозможно, пока планировщик PostgreSQL остаётся для вас чёрным ящиком. Книга Павла Толмачёва «PostgreSQL 16. Оптимизация запросов» даёт то, чего не хватает большинству разработчиков и администраторов: системное понимание того, как планировщик принимает решения, — и практические инструменты, чтобы направить его в нужную сторону.

Читать далее

Неудобные вопросы про бэкап PostgreSQL: где заканчивается СУБД и начинается оркестрация

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели6K

Как только очередной вендор обещает «убить нативные тулзы PostgreSQL», где-то устало вздыхает DBA. Попытка сделать бэкап PostgreSQL «лучше самого PostgreSQL» — это изначально неверная постановка задачи. 

Универсальный файловый агент не притворяется глубоко PostgreSQL-aware решением. Его задача в другом: взять нативные механизмы СУБД и превратить их в управляемый и наблюдаемый процесс на уровне всей инфраструктуры.

Вокруг такого подхода обычно сразу возникают неприятные, но правильные вопросы. Кто отвечает за консистентность? Где на самом деле живет PITR? Что будет, если потеряется WAL-сегмент? Можно ли восстановить одну таблицу, а не весь инстанс? И зачем вообще нужен внешний слой поверх pg_probackup, если у PostgreSQL уже есть свои зрелые инструменты?

Под катом — честный разговор о границах ответственности между PostgreSQL и внешней платформой.

Кат

Ближайшие события

Как найти подозрительные логины из разных стран за 2 часа в PostgreSQL

Уровень сложностиСредний
Время на прочтение10 мин
Охват и читатели5.2K

В задачах на SQL особенно интересно то, что один и тот же результат часто можно получить несколькими способами – и разница между ними оказывается не только в красоте запроса, но и в его поведении на реальных данных. В этой статье – разбор прикладной задачи про поиск подозрительных логинов из разных стран в пределах двух часов: с вариантом через self join, альтернативой на оконных функциях и сравнением планов выполнения в PostgreSQL.

Разбор запроса

PostgreSQL: транзакции, блокировки и почему Serializable падает

Уровень сложностиСредний
Время на прочтение6 мин
Охват и читатели7.1K

Несколько лет назад я делал внутренние доклады по PostgreSQL для команды — разбирали транзакции, блокировки и уровни изоляции на живых примерах. Потом ушёл на другой стек, а недавно вернулся к PostgreSQL и пересмотрел свои записи. Материал до сих пор актуален — базовые концепции не изменились. В статье: почему UPDATE из двух сессий «висит», чем Read Committed отличается от Repeatable Read на практике, почему Serializable падает даже без логического конфликта, и как VACUUM на самом деле работает с мёртвыми строками. Всё с SQL-примерами, которые можно повторить.

Читать далее

Векторный поиск в PostgreSQL: pgvector, pgvectorscale или VectorChord?

Уровень сложностиПростой
Время на прочтение15 мин
Охват и читатели8.7K

Привет Хабр! Меня зовут Владимир сегодня я постараюсь исправить ошибку из моей первой статьи про векторный поиск. Основная претензия к статье (два из трех комментариев 😂) была в том, что тема сисек векторного поиска не раскрыта.

В этом материале постараюсь кратко рассказать, что же такое векторный поиск, зачем он нужен, варианты реализации векторного поиска в PostgreSQL и провести сравнительные тесты времени отклика при различных объёмах данных.

Читать далее

BRIN, GIN, B‑Tree: полный гайд по индексам PostgreSQL для highload

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели12K

Индексы есть, а запросы всё равно тормозят? Или наоборот — индексов слишком много, и они только увеличивают нагрузку на запись?

Многие разработчики и администраторы баз данных попадают в ловушку: ставят B-Tree на всё подряд и надеются на лучшее. Но в highload-системах это может привести к катастрофе.

В этой статье я делюсь реальным опытом работы с PostgreSQL.

Статья будет полезна разработчикам, архитекторам и администраторам, которые хотят не просто «поставить индекс», а понять, как работает PostgreSQL под капотом и как проектировать базы данных, выдерживающие миллионы запросов в секунду.

Читать далее

Apache AGE под нагрузкой: что происходит, когда графы внутри PostgreSQL начинают по-настоящему тестировать

Уровень сложностиСредний
Время на прочтение13 мин
Охват и читатели6.2K

Apache AGE добавляет графы и Cypher в PostgreSQL. Мы написали бенчмарк, прогнали три типа нагрузки и обнаружили, что поиск кратчайшего пути выдаёт 7 TPS, а вставка вершин деградирует из-за SeqScan в функции проверки существования. Один патч — и TPS вырос в 15 раз. Рассказываем, как до этого докопались.

Читать далее

Зачем вообще нужен sa-tests-db

Время на прочтение4 мин
Охват и читатели7.3K

Когда говорят о качестве статического анализатора, обычно показывают удобные цифры: стало меньше шума, стало больше находок, лучше сработали правила на внутреннем проекте. Проблема в том, что такие оценки слишком легко подогнать под себя.

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

В контексте ГОСТ Р 71207-2024 это особенно важно. Там недостаточно сказать: «в среднем по языку результат хороший». Смотреть нужно по типам ошибок. Если по какому-то типу ошибок анализатор даёт слишком много ложных срабатываний или слишком много пропусков, это уже проблема, даже если общая картинка выглядит прилично.

Читать далее

Распределенная блокировка RedLock.NET. Просто и со вкусом

Уровень сложностиСредний
Время на прочтение17 мин
Охват и читатели8.9K

В современном мире enterprise-разработки часто встречается необходимость реализации распределённых блокировок. Недавно у меня как раз возникла необходимость реализации распределённой блокировки, и я применил пакет RedLock.NET, о чём и хочу рассказать.

Однако когда я писал статью, как-то «слово за слово», она вылилась в сравнительный анализ RedLock.NET и других решений, которые я тоже рассматривал. Мне кажется, все описанные ниже очевидные и не очень решения будет вспомнить вполне уместно. Надеюсь, получится не так уж длинно и будет полезно для читателей.

Под катом вы не найдете откровений, но найдете размышления (для кого-то, возможно, очевидные) разработчика над задачей, которую все вроде знают, как реализовывать, но когда нужно реализовать, то все опять «подзабыли».

Читать далее