Соответствие стандарту SQL
Эта страница переведена при помощи нейросети GigaChat.
Этот разделе описывается степень соответствия PostgreSQL текущему стандарту SQL. Приведенная ниже информация не является полным заявлением о соответствии, но она представляет основные темы с такой степенью детализации, которая разумна и полезна для пользователей.
Официальное название стандарта SQL – ISO/IEC 9075 «Database Language SQL» (Язык баз данных SQL). Пересмотренная версия стандарта публикуется периодически, последнее обновление было выпущено в 2023 году. Версия 2023 года обозначается как ISO/IEC 9075:2023 или просто SQL:2023. Предыдущими версиями были SQL:2016, SQL:2011, SQL:2008, SQL:2006, SQL:2003, SQL:1999 и SQL-92. Каждая новая версия заменяет предыдущую, поэтому заявления о соответствии более ранним версиям официально недействительны. Разработка PostgreSQL направлена на достижение соответствия последней официальной версии стандарта там, где это не противоречит традиционным функциям или здравому смыслу. Многие из функций, требуемых стандартом SQL, поддерживаются, хотя иногда они реализованы с немного отличающимся синтаксисом или функциональностью. Со временем можно ожидать что степень совместимости будет увеличиваться.
В SQL-92 определены три уровня соответствия: начальный (Entry), промежуточный (Intermediate) и полный (Full). Большинство систем управления базами данных, утверждающих о соответствии стандарту SQL, соответствуют только начальному уровню, поскольку весь набор функций на уровнях среднего и полного был либо слишком объемным, либо противоречил унаследованному поведению.
Начиная с SQL:1999, стандарт SQL определяет большой набор отдельных функций вместо трех неэффективно широких уровней, найденных в SQL-92. Подмножество этих функций представляет собой функции «ядра», которые должна обеспечивать каждая соответствующая реализация SQL. Остальные функции полностью необязательны.
Стандартные версии также разделены на несколько частей. Каждое из них известно под кратким названием. Обратите внимание, что эти части не пронумерованы последовательно:
- ISO/IEC 9075-1 Структура (SQL/Framework);
- ISO/IEC 9075-2 Основы (SQL/Foundation);
- ISO/IEC 9075-3 Интерфейс уровня вызовов (SQL/CLI);
- ISO/IEC 9075-4 Модули постоянного хранения (SQL/PSM);
- ISO/IEC 9075-9 Управление внешними данными (SQL/MED);
- ISO/IEC 9075-10 Привязки к объектно-ориентированным языкам (SQL/OLB);
- ISO/IEC 9075-11 Информационные и определяющие схемы (SQL/Schemata);
- ISO/IEC 9075-13 Процедуры и типы с использованием языка Java (SQL/JRT);
- ISO/IEC 9075-14 Спецификации, связанные с XML (SQL/XML);
- ISO/IEC 9075-15 Многомерные массивы (SQL/MDA);
- ISO/IEC 9075-16 Запросы графов свойств (SQL/PGQ).
Ядро PostgreSQL охватывает части 1, 2, 9, 11 и 14. Часть 3 покрывает драйвер ODBC, а часть 13 покрывает подключаемый модуль PL/Java, однако точное соответствие этим компонентам сейчас не проверяется. В настоящее время нет реализаций частей 4, 10, 15 и 16 для PostgreSQL.
PostgreSQL поддерживает большинство основных функций SQL:2023. Из 177 обязательных функций, необходимых для полного соответствия «Основной» функциональности, PostgreSQL соответствует как минимум 170. Кроме того, существует длинный список поддерживаемых дополнительных функций. Стоит отметить, что на момент написания статьи ни одна существующая версия какой-либо системы управления базами данных не заявляет о полном соответствии «Основной» функциональности SQL:2023.
В следующих двух разделах приведен список тех функций, которые поддерживает PostgreSQL, за которым следует список функций, определенных в SQL:2023, которые еще не поддерживаются в PostgreSQL. Оба этих списка являются приблизительными: могут быть незначительные детали, которые не соответствуют функции, указанной как поддерживаемая, и большие части неподдерживаемой функции фактически могут быть реализованы. Основная часть документации всегда содержит наиболее точную информацию о том, что работает, а что нет.
Функциональные коды, содержащие дефис, являются подфункциями. Поэтому, если какая-то конкретная подфункция не поддерживается, основная функция указана как неподдерживаемая, даже если некоторые другие подфункции поддерживаются.