Обновить
152.79

PostgreSQL *

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

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

«Ну вроде едет». Мой самописный мессенджер готов к публичной порке. Начнём?

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

В какой-то момент я понял неприятную вещь: если твой канал связи живет по чужому настроению, политической погоде, сбою в чужом облаке или очередной внезапной любви регулятора к кнопке «запретить» — это не твой канал связи. Это аренда с правом внезапного выселения.

Мне эта модель быстро наскучила.

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

Читать далее

Новости

Определение фактического профиля нагрузки в PostgreSQL и динамические состояния БД

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

Привет, ХАБР! Я Владимир Хаймин, эксперт по системам управления базами данных PostgreSQL в ВТБ. Когда вы знакомитесь с документацией по какой-то системе в части базы данных, то обычно характер нагрузки определяется исходно в архитектуре проекта. Но если система определена архитектором как OLTP, но в действительности может вести себя в некоторые периоды времени как OLAP. Нормально ли такое поведение, и каким образом мы можем определить, что она ведет себя как-то иначе? Как определить фактический профиль нагрузки OLAP или OLTP и выразить это через метрики, пригодные для событийного и графического мониторинга?

Эта статья является скорее исследовательской в области Data Science в прикладном контексте PostgreSQL. Data Science – это не только задачи ИИ: (ML, LLM,..), но прежде всего математика. Мы используем регрессивные методы для получения некоторых нужных нам параметров исходя из табличных рекомендованных данных. Также мы делаем упор на исследование состояния БД на основе статистики динамики ожиданий. Задача, несмотря на ее простой смысл, в решении оказалась не такой простой, и мы в итоге работали над ней довольно долго, хоть и в фоновом режиме. Также обратились к студенческому сообществу и провели по этой теме Хакатон ВТБ х Башня, прошедший в МГТУ им. Баумана 27 ноября 2025 года. В нем приняли участие студенты и выпускники НИУ ВШЭ, СПбГУ, ВКА им. А.Ф. Можайского, РАНХИГС, Московского Политехнического университета, НИТУ МИСИС, а также уже действующие архитекторы и администраторы БД. У команд было всего три дня на решение задачи, и хотя полностью её не удалось выполнить никому, совокупный результат всех участников позволил сформировать корректное решение. Результат именно этих работ я и изложил в статье и обязательно буду упоминать команды и авторов интересных идей, о которых пойдет речь.

Читать далее

Миграция с Supabase на VPS PostgreSQL без downtime: dual-write, strangler pattern и SSR read-path

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

TL;DR

Мигрировал продакшн базу с Supabase на VPS PostgreSQL прямо на работающем проекте — без остановки, без потери данных. Заодно перенёс авторизацию через strangler-подход и убрал Supabase из SSR read-path. Расскажу три инженерных решения с кодом.

Читать далее

Как писать изолированные интеграционные тесты с Testcontainers

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

Интеграционные тесты любят все на словах, пока не доходит до окружения, зависимостей и плясок с подготовкой стенда. В статье разберем более практичный подход: как писать изолированные интеграционные тесты с Testcontainers, не превращая их в хрупкую конструкцию из моков и костылей. На примере PostgreSQL и .NET посмотрим, как собрать тестовую среду, которая ведет себя достаточно близко к реальности, но при этом остается воспроизводимой и управляемой. Тема не новая, а боль до сих пор вполне живая — так что давайте разбираться.

Разобрать подход

Ускоряем вставку данных в PostgreSQL

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

Это текстовая версия доклада с Java Rock Star Meetup, с которым выступал Дмитрий Фатов (@FatOFF ) — руководитель разработки Газпромбанка с опытом разработки приложений более 13 лет. Дмитрий работал как backend-, так и fullstack-разработчиком на языках Java, Kotlin, JS, TS, 1С и имеет большой опыт работы с SQL-базами данных.

Читать далее

Eloquent Guard: как ловить N+1 и медленные запросы в Laravel, не зарываясь в vendor

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

Проблема N+1 стара как мир. Инструментов много: Debugbar хорош локально, Telescope тяжеловат для продакшена. Мне хотелось решения, которое будет «стучать» в Slack или Telegram именно тогда, когда проблема случилась на проде, и при этом сразу показывать пальцем на виновную строку кода.

Читать далее

Как я за выходные собрала сервис озвучки книг на FastAPI + Edge TTS + Telegram Mini App

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

Привет, Хабр! Я люблю слушать книги, но не все есть на Литрес и Storytel. Особенно это касается профессиональной литературы, фанфиков, статей и документов — всего того, что вряд ли когда-нибудь озвучат профессиональные дикторы.

Я поняла, что нейросетевые голоса уже достаточно хороши для комфортного прослушивания. И подумала: а что если сделать Telegram-бота, которому можно просто скинуть файл — а через пару минут слушать аудиокнигу в удобном плеере прямо в Telegram?

Так родился VoiceBooks — open-source сервис для озвучки книг, который работает полностью бесплатно.

В этой статье я разберу архитектуру open-source проекта: как организован парсинг 6 форматов в единый пайплайн, как работает фоновая генерация аудио без Celery и RabbitMQ, и как элегантно обойти лимиты Telegram Bot API на загрузку файлов.

Стек: Python 3.12, FastAPI, aiogram 3, Edge TTS, SQLAlchemy 2.0 + PostgreSQL. Деплой — Railway.

Читать разбор архитектуры

Почему полезны неудачи, или Cекреты успешных патчей в PostgreSQL

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

Мы продолжаем серию интервью с разработчиками Postgres Professional, которые получили медали за вклад в ванильный PostgreSQL. Почему полезен даже не принятый сообществом патч и при чём здесь везение, сегодня расскажет Александр Пыхалов.

Читать дальше

Почему `SUM() OVER (ORDER BY ...)` иногда считает «неправильно»: разбираем оконные фреймы в SQL

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

Почему SUM() OVER (ORDER BY ...) иногда даёт неожиданный результат, даже когда запрос синтаксически правильный? В статье на практических примерах разбираю, как работают оконные фреймы в SQL, чем отличаются ROWS, RANGE и GROUPS, где чаще всего возникает путаница и как писать накопительные итоги и скользящие метрики без сюрпризов. Если используете оконные функции в аналитике, этот разбор поможет сделать их поведение предсказуемым и управляемым.

Читать далее

Оптимизация PostgreSQL 17: от конфигуратора «Тантор Лабс» до PG_EXPECTO и DeepSeek

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

Telegram: @pg_expecto

GitHub - Комплекс pg_expecto для статистического анализа производительности и нагрузочного тестирования СУБД PostgreSQL

GitFlic - pg_expecto - статистический анализ производительности и ожиданий СУБД PostgreSQL

Глоссарий терминов | Postgres DBA | Дзен

Процесс начальной конфигурации сервера PostgreSQL, как правило, опирается на использование автоматизированных генераторов параметров (конфигураторов). Такие инструменты, включая широко применяемый конфигуратор компании «Тантор Лабс», предлагают готовый набор настроек на основе ограниченных входных данных — объёма оперативной памяти, количества ядер CPU и предполагаемого типа нагрузки. Однако на практике сгенерированная таким образом конфигурация не учитывает специфику реального рабочего профиля и особенности взаимодействия СУБД с аппаратным обеспечением, что может приводить к критическому снижению производительности, росту I/O wait и неэффективному использованию ресурсов.

Возникает закономерный вопрос: возможно ли выявить и устранить эти «узкие места» без модернизации оборудования, опираясь лишь на углублённый анализ статистических данных?

Читать далее

Разбираемся с ошибкой no empty local buffer available в PostgreSQL 18

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

При обновлении PostgreSQL с 17-й на 18-ю версию часть пользователей при работе с временными таблицами столкнулась с неожиданной ошибкой no empty local buffer available, в том числе, в типовых конфигурациях 1С. В статье разбираем первопричину: как новый механизм асинхронного prefetch в read stream конкурирует с insert stream за слоты local buffer pool, почему это не проявлялось в PostgreSQL 17, и какие исправления предложила сообществу PostgreSQL команда Tantor.

Читать далее

Отсечь змейке хвост: останавливаем разнос базы данных, когда времени на это нет

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

Привет, Хабр! Меня зовут Кирилл Абрамов, я backend-инженер в сервисе Автотека Авито. В этой статье я расскажу, как остановил постоянное увеличение объёма базы данных PostgreSQL и что надо делать, если времени на остановку не остаётся.

Читать далее

Anthropic и Open AI поддержали мой open source проект Databasus в рамках поддержки OSS проектов

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

За прошедшие две недели я узнал, что сначала Anthropic, а потом Open AI запустили программы поддержки open source проектов: Claude for Open Source и Codex for Open Source. Я подал заявку в обе программы со своим open source проектом и мои заявки одобрили.

Какие были требования, что это даёт и как я буду применять новые инструменты — ниже.

Читать далее

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

Детекция рейсов карьерных самосвалов методом шаблонной векторизации: архитектура, алгоритмы и инженерный анализ

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

В горнодобывающей промышленности точный учёт рейсов карьерных самосвалов — ключевой фактор управления производительностью. Традиционные системы диспетчеризации (DISPATCH от Modular Mining, Wenco, российская «Карьер») опираются на GPS-зоны: система фиксирует въезд самосвала в зону экскаватора или пункта разгрузки и по факту пересечения геозон формирует рейс. Однако этот подход не улавливает аномалии внутри цикла — простои, заторы, сбои датчиков, затянувшиеся обеды — и не позволяет классифицировать тип рейса по его «форме».

Альтернативный подход реализован в системе «Симуляция и детекция рейсов» — серверно-клиентском приложении (Go + React + PostgreSQL), которое распознаёт рейсы в реальном времени путём шаблонной векторизации телеметрических данных скорости и веса. Вместо привязки к координатам система строит вектор из скользящего окна телеметрии и сравнивает его с заранее сохранёнными эталонными шаблонами через меру сходства (косинусное сходство или нормы L1/L2). Когда степень совпадения превышает порог — рейс считается обнаруженным.

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

Читать далее

Шардинг* с равномерным распределением

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

Договоримся о терминах:·       

*Шардинг БД (db sharding) — это метод горизонтального масштабирования, при котором большая база данных разбивается на более мелкие, независимые части (shards), размещаемые на разных физических или виртуальных серверах. Каждый шард содержит подмножество данных, что снижает нагрузку на отдельные узлы, ускоряет запросы и позволяет хранить большие объемы информации, преодолевая ограничения вертикального масштабирования

**Read consistency (согласованность чтения) в БД — это гарантия того, что транзакция видит согласованное состояние данных, соответствующее определенному моменту времени (обычно моменту начала транзакции или запроса).

Читать далее

Миграция с Polling на Debezium

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

Привет, Хабр! Меня зовут Ибрагим и я бэкенд-разработчик в команде, которая разрабатывает C2C-площадку в Wildberries — раздел, где пользователи могут продавать друг другу товары через объявления. За каждым объявлением и заказом стоит набор данных, который аналитики используют для отслеживания метрик платформы: жизненный цикл объявлений, конверсии, статусы заказов.

Чтобы эти данные попадали в ClickHouse к аналитикам, нам нужна была надёжная синхронизация из PostgreSQL. Долгое время она работала через polling-сервис — и какое-то время нас это устраивало. Но по мере роста платформы проблемы стали проявляться всё чаще: данные терялись, лаг репликации достигал нескольких минут, а нагрузка на базу росла вместе с объёмами.

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

Читать далее

Как построить отказоустойчивый PostgreSQL-кластер и не промахнуться

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

В исходниках PostgreSQL встречаются ироничные комментарии, а самый веселый, на мой взгляд, находится в строке прямо перед запуском сервера. Судя по логам Git, это комментарий Тома Лейна, который сообщает: "We are ready to rock and roll", а следующей строкой идёт запуск сервера СУБД. Действительно, когда пытаешься запустить кластер PostgreSQL, порой не покидает ощущение "rock and roll", а потом вдруг кластер не стартует или внезапно переключается на другой узел из-за отступов в YAML-конфиге :).

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

Читать далее

Управляемые блокировки в 1С

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

Управляемые блокировки в 1С. Механизм выглядит простым (объект БлокировкаДанных, три метода — добавить, установить значение, заблокировать), а на практике поведение отличается от ожидаемого настолько, что в типовых конфигурациях до сих пор находят ошибки, связанные с блокировками.

Читать далее

Advisory locks в PostgreSQL: распределённая блокировка без Redis, которая у вас уже есть

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

В PostgreSQL есть фича, про которую знают далеко не все, хотя она существует с незапамятных времён. Advisory locks — пользовательские блокировки, которыми управляет не БД, а ваше приложение. PostgreSQL только хранит их состояние и разруливает конкуренцию. А вы решаете, что именно заблокировать и когда отпустить.

Зачем это нужно? Вы строите распределённую систему, несколько инстансов приложения работают с одной базой, и вам нужно гарантировать, что определённую операцию выполняет только один инстанс одновременно. Классический ответ — Redis с SETNX или Consul/ZooKeeper. Но если у вас уже есть PostgreSQL — зачем тащить ещё одну зависимость?

Читать далее

Как мы перевели корпоративную 1С с MS SQL на Digital Q.DataBase без переписывания кода

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

Привет, Хабр!

Меня зовут Андрей Жуйков, и в этой статье я хочу рассказать вам историю абсолютно практического содержания. Без теоретических рассуждений и без лозунгов про импортозамещение. Это реальный кейс о том, как мы перевели несколько наших корпоративных 1С с Microsoft SQL Server на Digital Q.DataBase.

Читать далее
1
23 ...