Temporal Data_ A Roadmap (PGConf.dev 2026)
Temporal Data_ A Roadmap (PGConf.dev 2026)
**Временные данные: дорожная карта (Temporal Data: A Roadmap)** PGConf.dev 2026 Представлено Полом Юнгвиртом (Paul Jungwirth) на PGConf.dev 2026 (https://2026.pgconf.dev) Какие временные функции из SQL:2011 поддерживает Postgres, что ещё предстоит сделать и что мы можем себе представить за пределами стандарта? В версии 18 мы получили временные первичные ключи, ограничения уникальности и внешние ключи. Сейчас на ревью находятся патчи для временного UPDATE/DELETE. (Возможно, к маю они будут закоммичены.) С этой функциональностью внешние ключи смогут поддерживать CASCADE/SET NULL/SET DEFAULT. Также есть менее зрелый патч для добавления PERIOD-ов. Разрабатывается и системное время. Я кратко освещу все эти функции. Но есть многое, что стандарт не охватывает. Бо́льшая часть моего доклада будет посвящена тому, что я вижу как пробелы и как я хотел бы к этому подойти: что может сделать ядро? Что может быть расширением? Что мы должны продвигать для стандартизации? Большой пробел — это отсутствующие типы соединений (внешнее соединение, антисоединение, полусоединение) и другие отсутствующие операторы (UNION, INTERSECT, EXCEPT, агрегаты). Если мы реализуем что-то в ядре, нам нужно учитывать алгебраические эквивалентности и преобразования планировщика для временных операторов. Ещё одна большая функция — это временной MERGE или ON CONFLICT DO UPDATE: то, что обновляет историю, заполняя при этом пропуски. Одна небольшая задача, которую я хотел бы решить, — сделать все эти функции прикладного времени достаточно расширяемыми для работы с пользовательскими типами. Мы уже почти там, но нужно ещё что-то вроде «функции поддержки типа». Мне также интересна возможность использования нескольких измерений прикладного времени: некоторые исследователи предлагали использовать это для моделирования утверждений об истинности. Внешнее расширение для многомерных range-типов могло бы это обеспечить. Патч для временного UPDATE/DELETE: https://commitfest.postgresql.org/patch/5836/ Реализации SQL для недостающих временных операторов: https://github.com/pjungwir/temporal_ops https://2026.pgconf.dev/session/629