Перейти к основному содержимому

Соответствие SQL

примечание

Эта страница переведена при помощи нейросети GigaChat.

В этом разделе описывается степень соответствия PostgreSQL текущему стандарту SQL. Приведенная ниже информация не является полным заявлением о соответствии, но она представляет основные темы с такой степенью детализации, которая разумна и полезна для пользователей.

Официальное название стандарта SQL – ISO/IEC 9075 «Язык баз данных SQL». Обновленная версия стандарта выпускается время от времени, последнее обновление появилось в 2016 году. Версия 2016 года называется ISO/IEC 9075: 2016 или просто SQL: 2016. Предыдущие версии были SQL: 2011, SQL: 2008, SQL: 2006, SQL: 2003, SQL: 1999 и SQL-92. Каждая версия заменяет предыдущую, поэтому утверждения о соответствии более ранним версиям не имеют официального значения. Разработка PostgreSQL направлена на соответствие последней официальной версии стандарта, если такое соответствие не противоречит традиционным функциям или здравому смыслу. Поддерживается множество функций, требуемых стандартом SQL, хотя иногда с немного отличающимся синтаксисом или функцией. В будущем можно ожидать дальнейшего продвижения к соответствию.

В SQL-92 определены три уровня соответствия: начальный, промежуточный и полный. Большинство систем управления базами данных, утверждающих о соответствии стандарту SQL, соответствуют только начальному уровню, поскольку весь набор функций на уровнях среднего и полного был либо слишком объемным, либо противоречил унаследованному поведению.

Начиная с SQL:1999, стандарт SQL определяет большой набор отдельных функций вместо трех неэффективно широких уровней, найденных в SQL-92. Подмножество этих функций представляет собой функции «ядра», которые должна обеспечивать каждая соответствующая реализация SQL. Остальные функции полностью необязательны.

Стандартные версии, начиная с SQL: 2003, также разделены на несколько частей. Каждое из них известно под кратким названием. Обратите внимание, что эти части не пронумерованы последовательно.

  • 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).

Ядро PostgreSQL охватывает части 1, 2, 9, 11 и 14. Часть 3 реализуется драйвером ODBC, а часть 13 - подключаемым модулем PL/Java, но точное соответствие этим компонентам в настоящее время не проверяется. В настоящее время для PostgreSQL нет реализации частей 4, 10 и 15.

PostgreSQL поддерживает большинство основных функций SQL: 2016. Из 177 обязательных функций, необходимых для полного соответствия ядру, PostgreSQL соответствует по крайней мере 170. Кроме того, существует длинный список поддерживаемых необязательных функций. Возможно, стоит отметить, что на момент написания ни одна текущая версия какой-либо системы управления базами данных не претендует на полное соответствие основному SQL: 2016.

В следующих двух разделах приведен список тех функций, которые поддерживает PostgreSQL, за которым следует список функций, определенных в SQL:2016, которые еще не поддерживаются в PostgreSQL. Оба этих списка являются приблизительными: могут быть незначительные детали, которые не соответствуют функции, указанной как поддерживаемая, и большие части неподдерживаемой функции фактически могут быть реализованы. Основная часть документации всегда содержит наиболее точную информацию о том, что работает, а что нет.

Примечание

Функциональные коды, содержащие дефис, являются подфункциями. Поэтому, если какая-то конкретная подфункция не поддерживается, основная функция указана как неподдерживаемая, даже если некоторые другие подфункции поддерживаются.