Postgres 12 в этюдах / Олег Бартунов (Postgres Professional)

YOUTUBE · 15.11.2025 10:16

Ключевые темы и таймкоды

Введение и цели

0:06
  • Обсуждение фич двенадцатого релиза PostgreSQL.
  • Автор, Олег Бортунов, является разработчиком и генеральным директором компании.
  • Цель - углубленное рассмотрение фич, доступных на конференции.

Изменения в работе с SQL и новые индексы

1:03
  • В двенадцатом релизе PostgreSQL кардинально изменились умолчания для работы с SQL.
  • Введение новых индексов, таких как каверы, улучшающие производительность.
  • Поддержка гисте и новые сторожи для оптимизации задач.

Эволюция баз данных и вклад PostgreSQL

3:00
  • Эволюция баз данных от примитивных до графовых.
  • Вклад PostgreSQL в развитие баз данных, начиная с 2003 года.
  • Введение языка JSONPath для навигации по структурам JSON.

JSONPath и его возможности

4:14
  • JSONPath позволяет выделять и индексировать нужные части JSON-дерева.
  • JSONPath - это стандарт, поддерживаемый PostgreSQL.
  • Примеры использования JSONPath для фильтрации и индексирования данных.

Поддержка JSONPath в PostgreSQL

6:11
  • JSONPath реализован как тип данных в PostgreSQL.
  • Поддержка фильтров и операций над JSON-объектами.
  • Различие между режимами Lax и Strict в JSONPath.

Примеры использования JSONPath

9:20
  • Примеры запросов с использованием JSONPath.
  • Визуализация JSON-дерева и выделение нужных элементов.
  • Преимущества использования JSONPath для логической и понятной структуры запросов.

Введение в функции JSONPath

11:55
  • В JSONPath можно искать строки с подстроками, используя две звездочки.
  • В версии 11.0.0 добавлены функции для проверки существования ключа и выполнения запросов.
  • Функции имеют одинаковую сигнатуру и позволяют передавать переменные.

Примеры использования функций JSONPath

13:29
  • Примеры использования функций JSONPath включают операторы exist и match.
  • Операторы можно ускорять с помощью индексов, поддерживаемых JSONPath.
  • Для сложных операций сравнения и включения доступно расширение JSONPath.

Оптимизация и будущее JSONPath

14:53
  • В будущем планируется поддержка новых функций и улучшений для JSONPath.
  • В текущей версии 12.0.0 подавляется арифметические ошибки в фильтрах.
  • Введено множество материалов и документации по JSONPath.

Использование CTE в SQL

15:50
  • CTE используется для создания временных таблиц, которые не оптимизируются.
  • CTE позволяет писать сложные выражения, которые не оптимизируются оптимизатором.
  • CTE может быть опасным, так как использует ворк-мем и может привести к свапу.

Примеры использования CTE

17:37
  • CTE может быть эквивалентно подзапросу, но выглядит лучше.
  • Выражения в CTE не оптимизируются, что может привести к разным результатам.
  • Пример использования CTE для рисования фрактала Мандельброта.

Интересные факты о CTE

19:18
  • CTE всегда исполняются, даже если не вызываются.
  • В PostgreSQL до версии 11 CTE могли быть медленнее, чем SELECT.
  • В версии 12 CTE теперь могут быть материализованы или не материализованы по умолчанию.

Материализация CTE

20:46
  • По умолчанию CTE не материализуются, что улучшает оптимизацию.
  • Если CTE используется несколько раз, оно будет материализовано.
  • Для предотвращения материализации нужно явно указать NOT MATERIALIZE.

KNN поиск ближайших соседей

22:40
  • KNN позволяет находить ближайшие объекты, используя индексы.
  • В PostgreSQL KNN реализован эффективно и позволяет избежать хаков.
  • KNN ускоряет запросы, особенно для больших баз данных.

Covering Index

24:51
  • Covering Index позволяет строить индексы для сложных запросов.
  • В PostgreSQL 12 Covering Index поддерживается для GIST и SPHINX.
  • Covering Index уменьшает трафик WAL и улучшает производительность.

Оптимизация индексов

26:50
  • В PostgreSQL 12 оптимизирована запись индексов, что уменьшает трафик WAL.
  • Это улучшает производительность и снижает нагрузку на диск.
  • Поддержка Covering Index доступна для GIST, SPHINX и JSON.

Репорт: прогресс

27:53
  • В PostgreSQL 12 можно отслеживать прогресс операций с индексами.
  • Это помогает DBA управлять операциями и планировать ресурсы.
  • Поддержка репорта: прогресс доступна для всех типов индексов.

Плаг и сторож

28:33
  • Плаг был сторожем, который хранил все версии данных в одном месте.
  • Это приводило к раздуванию таблиц, что было решено изменением архитектуры.
  • Теперь все версии данных хранятся в одном месте, что улучшает производительность.

Партишниг

31:32
  • Теперь можно использовать выражения для границ партиций.
  • Ранта партишин прунинг позволяет откидывать ненужные партиции во время исполнения.
  • Это улучшает производительность, особенно при работе с большими таблицами.

Тост декомпрессия

34:09
  • Тост декомпрессия позволяет эффективно работать с большими записями.
  • Частичная декомпрессия ускоряет доступ к данным, особенно для префиксного поиска.
  • Эксперименты показали значительное улучшение производительности при использовании тост декомпрессии.

Хранение данных в базе

36:53
  • Не стоит хранить много данных в базе, особенно если они редко используются.
  • Пример: ID и JSON данные, которые можно хранить отдельно для оптимизации запросов.
  • Идея: переписать TOAST для контроля хранения данных и их компрессии.

Новые функции в PostgreSQL 12

38:46
  • В PostgreSQL 12 добавлены новые функции, такие как MVCC и документация с фигурками.
  • Вопрос о медленных функциях и их решении.
  • Решение: использование индексов и поддержка в последних версиях.

Контроль целостности данных

41:20
  • В PostgreSQL 12 улучшен контроль целостности данных с помощью чек-сумм.
  • Утилита для работы с чек-суммами в офлайн режиме.
  • Вопрос о транзакциях REDON и их оптимизации.

Заключение и благодарности

46:12
  • Благодарность за вопросы и выбор лучшего вопроса.
  • Обещание рассказать больше о PostgreSQL и других темах.