Latest posts

Postgres Guru | Базы данных
2 Jun, 10:00
🛠️ Мало известные параметры команды EXPLAIN.Про команду EXPLAIN мы писали в канале много раз. И как про нее писать, если это один из основных инструментов оптимизации запросов? Но у этой команды есть еще несколько полезных параметров, о которых не все знают, а один из параметров появился не так давно.📌 MEMORY: сколько памяти использовал запросЭто новая возможность, появившаяся в версии 18. Она отличается от знакомого BUFFERS тем, что отслеживает объём памяти, потреблённый на этапе планирования запроса, а не его выполнения. Вывод появляется внизу результата EXPLAIN, например:EXPLAIN (ANALYZE, TIMING OFF) SELECT FROM mytable WHERE id = 123;Planning: Buffers: shared hit=36 read=1 Memory: used=63kB allocated=64kB📌 WAL: насколько активно логирование?Ещё одна полезная опция, которую многие упускают из виду - WAL:EXPLAIN (ANALYZE, WAL)
Postgres Guru | Базы данных
29 May, 10:03
🌐 PostgreSQL 19 - самые заметные нововведения (ч. 2)Всем привет! Продолжаем знакомить вас с новшествами и улучшениями, которые будут в PostgreSQL 19.📊 Производительность:1. Значительное ускорение работы функции jsonb_agg, особенно для типов integer и numeric; 2. Оптимизация LISTEN/NOTIFY: - Добавлена хеш-таблица для хранения соответствия каналов и получателей; - Увеличена производительность доставки уведомлений в несколько раз. 3. Оптимизация функций ICU для преобразования регистра: - Ускорение функций upper, lower для баз данных с кодировкой UTF-8 и правилами сортировки ICU.🧾 Работа с секционированными таблицами:1. Команды MERGE PARTITIONS и SPLIT PARTITION: - Позволяют объединять и разделять секции секционированных таблиц; - Ограничение: Получают исключительную блокировку на всё время выполнения. 2. Поддержка COPY ... TO для секционированных таблиц: - Теперь можно
Postgres Guru | Базы данных
22 May, 10:02
🌐 PostgreSQL 19 - самые заметные нововведения.Пока мы тут неизвестно чем занимались, рабочая группа PostgreSQL уже закончила четыре комитфеста и пятый в самом разгаре 😱 Мы собрали самые значительные (на наш взгляд) нововведения из этих комитфестов.Если вы хотите более подробно почитать о новинках PostgreSQL 19, то можете обратиться к замечательным статьям Павла Лузанова из компании Postgres Pro:1️⃣https://habr.com/ru/companies/postgrespro/articles/984580/2️⃣https://habr.com/ru/companies/postgrespro/articles/986694/3️⃣https://habr.com/ru/companies/postgrespro/articles/992426/4️⃣https://habr.com/ru/companies/postgrespro/articles/996010/Нововведений много, по этому в один пост все не поместиться, продолжаем в следующем.🔧 Подключение и удобство работы📌 servicefile в libpq и переменная :SERVICEFILE в psql - имя файла служб соединения можно указывать непосредственно в
Postgres Guru | Базы данных
20 May, 10:01edited
🌐 PostgreSQL 14 мая 2026 г.: обновления и исправления безопасности.Всем привет! Надеюсь вы как и мы соскучились 😁14 мая 2026 года PostgreSQL Global Development Group выпустила экстренное обновление для всех поддерживаемых веток СУБД, а также напомнила о скором прекращении поддержки PostgreSQL версии 14. Поддержка этой версии закончится 12 ноября 2026 года.Что вошло в релиз:⚠️ 11 уязвимостей (CVE), исправлено в этом обновлении. Четыре из них получили оценку CVSS 8.8 и допускают практическую эксплуатацию:1️⃣ CVE‑2026‑6473 - сервер PostgreSQL занижает размер выделяемых ресурсов с помощью целочисленного обхода.Целочисленный обход в нескольких функциях сервера PostgreSQL позволяет поставщику входных данных приложения заставлять сервер занижать размер выделяемых ресурсов и выводить данные за пределы допустимых значений.2️⃣ CVE‑2026‑6475 - PostgreSQL pg_base backup и pg_rewindPostgreSQL NewsPostgreSQL 18.4, 17.10, 16.14, 15.18, and 14.23 Released!The PostgreSQL Global Development Group has released an update to all supported versions of PostgreSQL, including 18.4, 17.10, 16.14, 15.18, …Channel name was changed to «Postgres Guru | Базы данных 💐»
1 Mar, 08:32

Postgres Guru | Базы данных
27 Feb, 10:00
🌐 Обновления PostgreSQL 18.3, 17.9, 16.13, 15.17 и 14.22.Вчера 26.02.2026 вышло обновление PostgreSQL для текущих, актуальных релизов. Само по себе обновление не закрывает каких-то критических дыр в безопасности, как это часто бывает, но устраняет много достаточно неприятных багов.✅ Исправлена проблема, из-за которой резервный сервер (standby) останавливался с ошибкой "could not access status of transaction" (не удалось получить доступ к статусу транзакции);✅ Исправлена ошибка, из-за которой функция substring() вызывала ошибку "invalid byte sequence for encoding" (недопустимая последовательность байтов для кодировки) для не-ASCII текстовых значений, если источником этого значения был столбец базы данных. Это было вызвано изменением, внесенным для исправления уязвимости CVE-2026-2006;✅ Исправление для функции strict_word_similarity в модуле pg_trgm, которое могло приводить к
Postgres Guru | Базы данных
24 Feb, 13:01
🤬 Утилита для восстановления данных PostgreSQL в критических ситуациях (PDU).Всем привет! Сегодня поговорим о замечательной утилите, которая может нас спасти в критической ситуации повреждения данных PostgreSQL и отсутствия бэкапов.PDU (PostgreSQL Data Unloader) — это профессиональный инструмент для аварийного восстановления и извлечения данных с открытым исходным кодом для баз данных PostgreSQL (версий 14-18). Он читает файлы данных PostgreSQL напрямую, без необходимости запущенного экземпляра базы данных, что делает его идеальным решением для аварийного восстановления и экстренного извлечения данных.Официальный GitHub утилиты:➡️ https://github.com/wublabdubdub/PDU-PostgreSQLDataUnloaderPDU поможет нам в следующих критических сценариях:❌ Полное повреждение базы данных - не запускается, невозможно восстановить; ❌ Случайное DELETE/UPDATE - критически важные данные исчезают
Postgres Guru | Базы данных
9 Feb, 10:00
🔬 Статистика в PostgreSQL (часть 3).Всем привет! В этой заметке мы уже наконец закончим разбираться с устройством статистики в PostgreSQL.В предыдущей заметке мы остановились на расширенной статистике и ее типах. Подходить к выбору типа расширенной статистики надо с умом, в зависимости от того какие операции используются в запросах.Выбор типа расширенной статистикиТип расширенной статистики, которую вы будете создавать, зависит от используемых операций:📌 Если вы используете только оператор =, используйте dependencies (зависимости);📌 Если у вас есть операторы GROUP BY, вам понадобится ndistinct (количество уникальных значений);📌 Если вы используете скалярные операторы (<, >, <=, >=), вам нужен MCV list (список наиболее частых значений).Ограничения расширенной статистикиПоскольку гистограммы не поддерживаются в расширенной статистике, она точна только:
Postgres Guru | Базы данных
29 Jan, 10:00
🔬 Статистика в PostgreSQL (часть 2).Всем привет! Продолжаем углубляться в статистику PostgreSQL!В прошлой заметке мы остановились на селективности.Postgres собирает следующие элементы:1️⃣ Сумму селективностей всех MCV (sumcommon); 2️⃣ Долю NULL-значений (nullfrac); 3️⃣ Селективность MCV (mcv_select): Это сумма частот MCV, соответствующих условию; 4️⃣ Селективность гистограммы (hist_select): Это процент корзин, соответствующих условию. Гистограмма состоит из "корзин" (buckets). Каждая корзина должна содержать примерно одинаковый процент строк. Чтобы получить это, Postgres перебирает гистограмму и подсчитывает количество подходящих корзин. Селективность гистограммы будет равна (количество_совпадений) / (количество_корзин).Затем Postgres использует все это для расчета селективности условия:1️⃣ Инициализация селективности: selec = 1.0 - nullfrac - sumcommon; 2️⃣ Объединение с
Postgres Guru | Базы данных
19 Jan, 13:01
🔬 Статистика в PostgreSQL (часть 1).Все мы прекрасно знаем зачем нужна статистика в PostgreSQL, но как работает статистика изнутри, что собирается и как рассчитывается нам может быть уже неизвестно. Работает, собирается, да и ладно ☺️ Но более глубокие знания работы статистики в PostgreSQL могут нам помочь как и в оптимизации запросов, так и в устранении неполадок. Поэтому решили выпустить цикл заметок по более углубленному изучению статистики в PostgreSQL. Погнали!Postgres отлично справляется с оптимизацией запросов. Собирая данные во внутренних статистических таблицах, Postgres перед выполнением запроса оценивает множество факторов: например, будет ли сканирование по индексу эффективнее последовательного сканирования, как выбирать данные для оператора WHERE и т.д.Что Postgres не знает - это то, как ваши столбцы связаны друг с другом. Postgres — не алгоритм машинного обучения.
Postgres Guru | Базы данных
13 Jan, 10:00
🔬 PostgreSQL 18 и поддержка NUMA (libnuma).Всем привет! Надеюсь все пришли в себя после длинных выходных и готовы воспринимать информацию ☺️В PostgreSQL версии 18 была представлена начальная поддержка архитектуры NUMA (Non-Uniform Memory Access, неоднородный доступ к памяти), которая реализована с использованием библиотеки libnuma. Чтобы эта поддержка работала, PostgreSQL должна быть собрана с опциец конфигурации --with-libnuma.Эта функция помогает оптимизировать производительность на многопроцессорных серверах, управляя распределением памяти между различными узлами NUMA.Ключевые моменты поддержки PostgreSQL libnuma:1️⃣ До версии 18 управление производительностью PostgreSQL в системах с NUMA в значительной степени зависело от конфигурации на уровне операционной системы (например, использование numactl с политикой чередования interleave и включение огромных страниц(huge
Postgres Guru | Базы данных
30 Dec 2025, 10:00
Сейчас в тренде подводить итоги года канала. Вот и мы решили не отставать. Наши итоги года не сильно выдающиеся, но мы и не гнались за цифрами.Все чего мы хотели - это приносить реальную пользу нашими постами всем DBA, кто нас читает. И надеемся, что нам это удалось! ☺️Всех с наступающим Новым Годом! Успехов и стабильной работы ваших СУБД в новом году.Мы в свою очередь постараемся приносить вам еще больше пользы и интересных постов в новом году!

Channel name was changed to «Postgres Guru | Базы данных 🎅»
29 Dec 2025, 20:00

Postgres Guru | Базы данных
29 Dec 2025, 16:01
🤖 Храним большие базы данных PostgreSQL правильно.Базы данных PostgreSQL имеют свойство незаметно расти. Однажды вы замечаете, что запросы замедлились, резервное копирование длится вечность, и никто уже не помнит, что хранится в той таблице на 500 ГБ.В заметке рассмотрим как бороться с разрастанием базы данных, какие у нас для этого есть методы и возможности.📌 Партиционирование.Если в вашей базе есть одна гигантская таблица, которая продолжает расти, партиционирование может стать спасением. С 10-й версии PostgreSQL поддерживает нативное декларативное партиционирование, а в последних версиях (13 и выше) работать с ним стало намного проще.Вам не нужны никакие расширения - вы можете определить родительскую таблицу и разделить её по диапазону, списку или хешу. Например, для данных, зависящих от времени:CREATE TABLE events ( id serial, created_at timestamptz, payload jsonb ) PAR
Postgres Guru | Базы данных
17 Dec 2025, 10:00
🤖 Используем ИИ в PostgreSQL (расширение pg_ai_query).На фоне бума развития искусственного интеллекта, неудивительно, что ИИ появляется и в нашей любимой PostgreSQL. Недавно появилась стабильная версия расширения pg_ai_query, которое позволяет использовать ИИ прямо в внутри PostgreSQL.Официальный GitHub расширения:➡️ https://github.com/benodiwal/pg_ai_queryОсновные возможности расширения:✅ Описание SQL запросов на естественном языке (пока только на английском): преобразование описаний на естественном языке в корректные SQL-запросы PostgreSQL; ✅ ИИ-анализ запросов: анализ производительности запросов с помощью EXPLAIN ANALYZE и получение рекомендаций по оптимизации; ✅ Автоматическое обнаружение схемы: расширение автоматически анализирует структуру базы данных для понимания таблиц, связей и ограничений; ✅ Поддержка нескольких ИИ-провайдеров: работа с моделями OpenAI (GPT-4,
Postgres Guru | Базы данных
16 Dec 2025, 10:00
🔬 Контрольная сумма в PostgreSQL.Контрольная сумма данных - это простой, но мощный метод проверки целостности страниц данных, хранящихся на диске. Это как цифровой отпечаток для каждого 8-килобайтового блока данных («страницы») в вашей базе данных.Когда PostgreSQL записывает страницу данных (таблицы или индекса) на диск, она запускает алгоритм для содержимого страницы, чтобы вычислить небольшое производное значение - контрольную сумму. Эта контрольная сумма сохраняется в заголовке страницы вместе с данными. Каждый раз, когда PostgreSQL считывает эту страницу с диска, она немедленно пересчитывает контрольную сумму из данных и сравнивает её с сохранённым значением.Если значения не совпадают, это означает, что страница данных была изменена или повреждена с момента последней записи. Это важно, потому что повреждение данных может происходить незаметно. Обнаружив несоответствие,
Postgres Guru | Базы данных
11 Dec 2025, 13:00
🤬 Чиним поврежденный уникальный индекс в PostgreSQL.Если вы увидели вот такую картину с первичными ключами в таблице, то это следствие повреждения уникального индекса:SELECT id FROM mytable ORDER BY id LIMIT 5;id ---- 1 2 3 3 4 (5 rows)Надо чинить!⚠️ Перед дальнейшими операциями обязательно сделайте копию таблицы с повреждённым индексом, а лучше всей базы.Уникальный индекс невозможно создать (или пересоздать), пока в таблице есть дублирующиеся строки. Postgres просто откажется это делать, так как это нарушает уникальность. Поэтому мы должны удалить дублирующиеся строки из таблицы.
Postgres Guru | Базы данных
8 Dec 2025, 07:30
🔬 Типы сканирований в PostgreSQL.Погнали!Последовательное сканирование (Sequential Scan, Seq Scan)Этот тип сканирования читает всю таблицу целиком, строка за строкой, проверяя соответствие условиям запроса. Если есть WHERE или FILTER, Postgres просто сканирует каждую строку в поиске совпадений.Это основа для выполнения сканирований, и для многих запросов Postgres будет использовать именно его. Для очень больших наборов данных или тех, к которым часто обращаются, последовательные сканирования не идеальны, и сканирование по индексу может быть быстрее.Сканирование по индексу (Index Scan)Postgres может использовать индекс как карту для данных, хранящихся в таблице. Базовое сканирование по индексу использует B-дерево для быстрого поиска точного местоположения данных в два этапа: сначала Postgres находит запись в индексе, использует ссылку, а затем извлекает остальные данные
Postgres Guru | Базы данных
1 Dec 2025, 10:00
🔬 Как бороться с раздуванием таблиц (bloat)?Раздувание (bloat) - это свободное пространство внутри страниц базы данных, которое образуется, когда AUTOVACUUM удаляет большое количество кортежей (tuples).Когда строка в таблице обновляется, Postgres не перезаписывает старые данные. Вместо этого он помечает старую версию строки (кортеж) как "мёртвую" и создаёт новую версию строки. Со временем, по мере обновления или удаления строк, пространство, занимаемое этими мёртвыми кортежами, может накапливаться. В какой-то момент AUTOVACUUM (или ручной VACUUM) удаляет мёртвые кортежи, оставляя свободное пространство внутри страниц, доступное для повторного использования. Но если накапливается большое количество мёртвых кортежей, могут оставаться большие объёмы свободного пространства - в худших случаях оно может занимать 99% всего пространства таблицы или индекса, или даже больше.Низкие уровни
Postgres Guru | Базы данных
21 Nov 2025, 10:00
🔬 Системный каталог PostgreSQL (ч. 3).Всем привет! Продолжаем разбираться с системным каталогом PostgreSQL. Это будет заключительная заметка из этой серии.Фактически, те метакоманды psql, которые мы изучали в первой заметке из этой серии соответствуют конкретным таблицам системного каталога. Вот их примерное соответствие:\d (таблицы и объекты) - pg_class\di (индексы) - pg_class, pg_index\dx (установленные расширения) - pg_extension\dp (таблицы и привилегии) - pg_class, pg_roles, pg_attribute\l (базы данных) - pg_database\df (доступные функции) - pg_procДавайте рассмотрим эти таблицы подробнее и посмотрим как их можно использовать.
Related Channels
Other channels in the same section of the catalogue.
