Обновить
256K+

PostgreSQL *

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

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

Как найти медленный запрос в PostgreSQL: три инструмента мониторинга

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

EXPLAIN ANALYZE отлично справляется с диагностикой конкретного запроса — но только если вы уже знаете, какой именно запрос виновен. На практике проблемный запрос нужно сначала найти среди тысяч других. Ждать жалоб пользователей или вручную мониторить дашборды — путь, который не масштабируется.

В этой статье разберём три инструмента PostgreSQL для автоматического поиска медленных запросов: pg_stat_statements, auto_explain и log_min_duration_statement. Для каждого — настройка, ключевые параметры и когда что использовать.

Читать далее

Инфраструктура для изучения основ машинного обучения на локальном компьютере с помощью Apache Spark

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

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

Один из получаемых типов будет вызывать увеличение загрузки процессора.

Необходимо найти, какой тип файлов вызывает загрузку процессора, применив машинное обучение.

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

Читать далее

n8n self-hosted в production: docker-compose, nginx, ретраи и три грабли

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

n8n запускается одной командой docker run и через пять минут вы видите логин-форму. Это маркетинговый ролик. Реальный production-конфиг - с persistent storage, корректными webhook-URL, ретраями, бэкапами PostgreSQL и мониторингом - выглядит сильно иначе. В этой статье - конфигурация, которую я держу на 12 проектах в течение полутора лет. Плюс три грабли, на которые наступал лично.

Все примеры - community-edition, без коммерческой лицензии. На проде у меня сейчас крутится 2.19.5, но в image: стоит n8nio/n8n:latest плюс Watchtower (про него ниже) - он подтягивает свежий образ ночью. Внутри 2.x API/env-переменные стабильны, рекомендую :latest + Watchtower на проектах где простой 5 минут утром не критичен, и закреплённый минор (:2.19.5) - на проектах где даунтайм нельзя.

Читать далее

Как хранятся большие бинарные данные в БД: накладные расходы BLOB в Oracle и Large Object в Postgres

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

Все, кто имел дело с базами данных, знают, что там можно хранить бинарные данные большого объема. Чаще всего, это загруженные в БД файлы. Достаточно давно меня стал посещать такой вопрос — а какие накладные расходы на хранения файлов в БД? Понятно, что они есть, но вот какие и от чего они зависят? Но каждый раз были вопросы и задачи поважнее. И вот недавно произошло то, что рано или поздно должно было произойти — одновременно у двух заказчиков возник вопрос, который, упрощая, выглядит так: «Почему мы загрузили такой‑то объем данных, а место на диске занято больше?». У одного из заказчиков был Oracle, у второго — Postgres. Конечно, можно было бы ответить уклончиво: «У каждой БД существую накладные расходы на хранение данных, вот у вас эти накладные расходы вот такие. Разработчикам СУБД виднее, как все должно быть.» И, может быть, заказчика такой ответ и устроил, но сам я понимал, что это просто отписка, так как у нас нет конкретного ответа. Несолидно как‑то. Поэтому, давайте разбираться.

Читать далее

ASOC на коленке: как я навайбкодил замену DefectDojo для своих задач с обогащением из БДУ ФСТЭК

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

Когда я начал разбираться, чем в open source можно закрыть задачу ASOC / Vulnerability Management, выбор оказался довольно грустным. По сути единственный известный вариант это DefectDojo. Сам я его в production не тащил, но от коллег регулярно слышал одну и ту же боль: на больших объёмах findings он начинает захлёбываться, в UI быстро не хочется заходить, а аналогов с человеческим интерфейсом и БДУ ФСТЭК «из коробки» в open source я просто не нашёл. Так и появилась моя ASOC-платформа: Go + PostgreSQL + Redis Streams + React, развёртывание одной командой docker compose up, миллион findings без тормозов (почти), обогащение из 7 источников, формула приоритизации, которая учитывает не только CVSS, но ещё EPSS, CISA KEV и БДУ ФСТЭК. В статье расскажу про архитектурные решения, грабли и почему я выкинул ORM ещё до первой строчки SQL.

Это не статья про готовый коммерческий продукт и не пиар-релиз. Скорее разбор того, как и почему был спроектирован Red Lycoris, open source платформа для централизованного хранения, дедупликации, обогащения и приоритизации уязвимостей. Я делаю её один, и если кому-то она пригодится, буду только рад. Если найдёте, где я ошибся в архитектуре, буду рад вдвойне.

Читать далее

Три архитектурных решения для multi-tenant B2B SaaS, о которых я пожалел, что не узнал раньше

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

Самая дорогая ошибка моего B2B SaaS имела ровно одну строчку

Самая дорогая ошибка моего B2B SaaS имела ровно одну строчку: TENANT_ID = “tenant-1” в config.py. Полтора дня поиска бага показали, почему multi-tenant архитектуру нужно закладывать с первого коммита. Разбор трёх архитектурных решений для multi-tenant SaaS в регулируемой отрасли — tenant_id helper, PostgreSQL EXCLUDE USING gist против double-booking, 152-ФЗ как код на FastAPI и SQLAlchemy.

Читать далее

Ещё один круг ада: мониторинг ERP без Prometheus, Grafana и выделенного DevOps

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

Загнивая от усталости, дописывая последнюю строчку последнего (или не очень) модуля системы, теша себя мыслями о скорой зарплате, каждый уважающий себя философ задаётся вопросом - а как контролировать в бою всё то, что мы написали¿¿

Глупец скажет - никак, мы же покрыли тестами.

Хитрец скажет - Grafana+Prometheus отдельными сервисами.

Психопат на крайней стадии выгорания скажет - поднимем отдельную админку и будем собирать метрики и инциденты без прометеуса, снимая снимки системы каждую минуту асинхронными воркерами под каждый компонент платформы, включая сервер, базу данных, объектное хранилище и кэш. На лету будем высчитывать дельты серверных метрик, а в завершение отрисуем всё это дело без графаны, силами Recharts и Святого Духа, упакуем в отдельную панель для технических администраторов и наконец - сделаем клиентский status-page платформы.

Читать далее

Тонкая настройка PostgreSQL 17: как три параметра изменили ландшафт ввода-вывода

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

Официальное предупреждение (дисклеймер)

Настоящая статья подготовлена с использованием технологий искусственного интеллекта.

В частности:

— экспериментальные данные обработаны и проанализированы нейросетью;

— иллюстративный материал, сопутствующие слоганы, а также предисловие и послесловие сгенерированы нейросетью;

— макет статьи редактировался и корректировался нейросетью.

Лицам, придерживающимся позиции «ИИ‑веганства» (испытывающим устойчивый страх, неприязнь или психологический дискомфорт по отношению к нейросетевым системам), настоятельно не рекомендуется ознакомление с содержанием данной публикации, равно как и участие в её обсуждении, во избежание возможного нанесения вреда психологическому благополучию.

Если интересно, читайте.

Реально большая стейт-машина: как мы строили облачную запись и ИИ-конспектирование в Телемосте

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

Всем привет! Меня зовут Илья Григорьев, я старший бэкенд-разработчик в команде Телемоста. В этой статье я разберу наш опыт разработки двух фич последнего года — ИИ-конспект с Алисой Про и облачной записи на Диск. Покажу, как мы проектировали их архитектуру, почему не всё получилось с первого раза, с какими системными и техническими ограничениями столкнулись при работе с медиаданными и как в итоге выстроили пайплайн их обработки и анализа.

Читать далее

Невидимый syntax error в PostgreSQL: как одна строка SQL съела полтора дня дебага

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

Хочу рассказать про баг, который я искал полтора дня и который оказался опечаткой длиной в одну инструкцию. Если коротко: PostgreSQL (16.4 в моём случае, но воспроизводится начиная с 12-й) не разрешает UNION ALL сразу после ORDER BY ... LIMIT N без круглых скобок. И самое неприятное - ошибку об этом я узнал последним, потому что между моим SQL-запросом и логами стояло пять промежуточных слоёв, каждый из которых её по-своему проглотил.

Расскажу как нашёл, как фиксил, и что в итоге добавил в pre-deploy чек-лист.

Читать далее

TeachTrack: NestJS + Telegram‑бот напоминаний + РКН — как я в одиночку собрал CRM для частных репетиторов

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

Месяц назад я выложил на Хабр статью про TripTrack — GPS‑трекер для машины на iOS, который собрал будучи бэкендером без опыта в Swift. Статья неожиданно набрала 7.4К (на данный момент написания) просмотров. Но, мне посчастливилось поработать по своей специальности, не только под IOS‑приложения, а под NestJS бекенд.

Параллельно с TripTrack я писал второй проект — на этот раз ровно в зоне комфорта (NestJS + PostgreSQL), и это позволило развернуться по‑серьёзному: транзакционный outbox для идемпотентных отправок в Telegram, single‑use invite‑токены с защитой от enumeration, timezone‑aware scheduler, partial unique indexes — словом, всё то, что для бэкендера интересно само по себе.

Под катом — про то, как устроен Telegram‑бот напоминаний в TeachTrack, что я понял про pessimistic_write и FOR UPDATE SKIP LOCKED, зачем pet‑проекту с реальными пользователями из РФ нужно уведомление в РКН, и почему холодный аутрич преподавателям английского научил меня важной вещи про русский менталитет.

Читать далее

Группировка в PostgreSQL (на апрель 2026 года)

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

Группировка - это база OLAP. Но в интернете преступно мало информации о том, как это реализовано в PostgreSQL. Максимум, что вы сможете найти, - это CREATE AGGREGATE с функциями перехода или GROUP BY GROUPING SETS. А если спросить, как реализуется группировка, то в ответ получите - с помощью сортировки или созданием хэш-таблицы, но глубже вам вряд-ли кто-то что-то скажет.

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

Чтобы раскрыть завесу тайны и сделать жизнь других людей, решивших в это погрузиться, проще, в этой статье я описываю внутрянку модуля группировки: реализация агрегатов, разные стратегии группировки, поддержка GROUPING SETS и прочее. Помимо этого, как всегда, куча различных оптимизаций, неочевидные детали реализации и чуть-чуть истории. В конце опишу новую стратегию группировки - Index Aggregate.

Читать далее

Использование Trino для построения ETL‑процессов

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

1. Введение. Trino: ключевые задачи и главные преимущества

В современной архитектуре управления данными ETL‑процессы рассматриваются не как вспомогательный инструмент, а как базовый механизм интеграции, трансформации и подготовки данных, поступающих из множества гетерогенных источников. Ключевая цель этих процессов — избавиться от хаоса и разрозненности данных, которые почти всегда появляются в больших распределенных компаниях [1].

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

ETL возник как вынужденная мера, так как во время его появления (1970–1990-е) не было ни высокоскоростных сетей, ни мощных распределенных движков аналитики, ни концепции Data Lake. Единственным надёжным способом построить аналитическую отчетность было физически извлекать данные из операционных систем и копировать их в отдельную специализированную базу. Именно поэтому ETL закрепился как основной архитектурный паттерн аналитических систем на долгие десятилетия.

Увы, такой подход породил и массу проблем: это дублирование данных, долгие пайплайны, сложные зависимости, задержки обновления и огромные затраты на поддержку. Традиционным ETL‑процессам становится всё труднее справляться с постоянно растущим объемом поступающих данных. Более того, большие сложности возникают при работе с уже накопленной информацией, ведь её требуется хранить на протяжении многих лет, а значит — сохранять возможность глубокого анализа по всей доступной истории.

Читать далее

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

Postgres advisory locks на Neon ломаются от TCP‑сброса. История четырёх фиксов retry‑логики

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

Расскажу про четыре production‑инцидента на одном куске кода за десять дней. В каждом я думал, что разобрался. Закончилось тем, что я выкинул pg_advisory_lock из retry‑пути и поставил FOR UPDATE SKIP LOCKED. Day‑generation лок остался advisory‑ным, но утечка там не критична — почему именно, разберу в конце. Полезно, если у вас Postgres на Neon (или Supabase, или Aiven serverless) и где‑то по коду есть session‑scoped advisory locks для координации задач между репликами.

Читать далее

Аудит Zabbix: на что нужно обратить внимание

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

Привет! Меня зовут Антон Касимов, я руководитель Gals Software, а еще сертифицированный тренер и эксперт по Zabbix. В общем, могу сказать, что знаю эту систему чуть больше уровня «видел пару раз интерфейс». Zabbix — одна из самых популярных в мире систем мониторинга. Наверное, не существует компаний с собственной инфраструктурой, у которых не было бы Zabbix. Не так давно мы запустили услугу аудита Zabbix и обнаружили некоторые закономерности, на которые я хотел бы обратить внимание в этой статье. В нашем телеграм-канале Zabbix Recipes мы регулрно делимся нашими находками и публикуем анонсы вебинаров (скоро и по этой теме тоже будет), поэтому приглашаю присоединиться. Я построю повествование так, чтобы вы могли пройтись по статье как по чек-листу и проверить свою инсталляцию на предмет возможных улучшений. Погнали!

Читать далее

От Infinispan до Postgres на 1 ТБ: эволюция кэша поиска отелей

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

Всем привет! Хочу рассказать, как мы проектировали кэш поиска отелей и почему за полтора года прошли путь от Infinispan к managed Redis а затем к Postgres. По стеку java-21, spring-boot-3, 1 вендор отелей, расчетная нагрузка 1000 RPS и 10M запросов в сутки.

Читать далее

DeepSeek, PG_EXPECTO и философская инструкция: тройная диагностика аномалий PostgreSQL (15 → 17)

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

Официальное предупреждение (дисклеймер)

Настоящая статья подготовлена с использованием технологий искусственного интеллекта.

В частности:

— экспериментальные данные обработаны и проанализированы нейросетью;

— иллюстративный материал, сопутствующие слоганы, а также предисловие и послесловие сгенерированы нейросетью;

— макет статьи редактировался и корректировался нейросетью.

Лицам, придерживающимся позиции «ИИ‑веганства» (испытывающим устойчивый страх, неприязнь или психологический дискомфорт по отношению к нейросетевым системам), настоятельно не рекомендуется ознакомление с содержанием данной публикации, равно как и участие в её обсуждении, во избежание возможного нанесения вреда психологическому благополучию.

Если интересно, читайте.

Резервирование PostgreSQL с помощью WAL-G

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

Утилита резервирования pgBackRest перестала поддерживаться, стало актуальным найти ей замену. Главными альтернативами называют WAL-G и Barman. Можно использовать pg_basebackup+pg_receivewal. Преимущество WAL-G в том, что резервирование возможно по протоколу S3, WAL-G обеспечивает более высокую скорость резервирования и сжатия, имеет неплохие перспективы развития. Кроме протокола S3, WAL-G может резервировать и восстанавливать из директории в файловой системе, работает с Patroni. Директория с бэкапами не обязательно должна находиться на локальном диске, можно смонтировать любую файловую систему, например, NFS. Утилита свободно распространяемая.

В статье рассматриваются примеры команд, которыми можно резервировать и восстанавливать PostgreSQL утилитой WAL-G с обеспечением защиты от потерь транзакций (zero data loss).

Читать далее

Долгие миграции на старте сервиса — это не startup-проблема. Это ошибка в архитектуре релиза

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

Когда сервис поднимается по 8-15 минут, команда почти всегда начинает крутить одни и те же ручки: увеличивает initialDelaySeconds, добавляет startupProbe, поднимает progressDeadlineSeconds, иногда переносит миграцию в initContainer и считает, что стало «по-кубернетесному». Обычно это не лечение. Это способ аккуратнее завернуть проблему в YAML. Если тяжёлая миграция живёт внутри старта приложения, вы связали жизненный цикл Pod, rollout Deployment и поведение базы в один общий узел. А такие узлы в проде рвутся не там, где их ждут.

Читать далее

Доверяй, но проверяй: как проверить качество энтерпрайзных модификаций PostgreSQL на стороне клиента

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

Доверяем ли мы качеству OSS PostgreSQL? — выглядит он достойно. А насколько безопасны фичи, добавленные вендором? Это вопрос, поскольку код закрытый. Сила бренда — это хорошо, но хотелось бы иметь объективное подтверждение.

Здесь я рассказываю о небольшом изобретении — модуле pg_pathcheck. Он выводит на новый уровень контроль надёжности СУБД — позволяет проверять качество кода на стороне клиента. А конкретно, на его серверах и нагрузке проверить, не остаётся ли внутри оптимизатора так называемые dangling pointers — указателей вникуда. Это может не приводить к проблемам, пока оптимизатор не трогает эти указатели, но вот если таки тронет...

Читать далее