Соответствие стандартам SQL

Appendix D. Соответствие стандартам SQL

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

Формальное название стандарта SQL - это ISO/IEC 9075 "Database Language SQL" (Язык баз данных SQL). Время от времени выпускается пересмотренная версия этого стандарта; наиболее свежее обновление было выпущено в 2008 году. Версия 2008 известна как ISO/IEC 9075:2008 или просто как SQL:2008. Версиями до неё были: SQL:2003, SQL:1999 и SQL-92. Каждая версия замещает предыдщую, так что требования соответствия стандарту более ранних версий не имеют официальной силы. Разработка PostgreSQL имеет целью достижение совместимости с последней официальной версией стандарта, где такая совместимость не противоречит традиционным возможностям или здравому смыслу. Многие из возможностей, требуемых по стандарту SQL уже поддерживаются PostgreSQL, хотя иногда и с небольшими отличиями в синтаксисе или функции. В будущем, можно ожидать дальнейшее сближение со стандартом.

SQL92 определяет три списка возможностей по достигнутой совместимости: Entry, Intermediate и Full (Начальная, Промежуточная и Полная). Большинство СУБД претендующих на совместимость со стандартом SQL, соответствовали только уровню Entry, так как полный список возможностей для уровней Intermediate и Full был или слишком объёмный или приводил к конфликту с существующим поведением СУБД. Начиная с SQL:1999 определяет большой список отдельных возможностей, в отличие от неэффективного широкого разделения на три уровня в SQL92. Большой подсписок этих возможностей представлят собой "Core" (основные) возможности, каждая из которых должна поддерживаться совместимой со стандартом реализацией SQL. Оставшиеся возможности являются просто необязательными. Некоторые необязательные возможности группируются вместе в форме "пакетов", на соотвествие с которыми могут претендовать реализации SQL.

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

  • ISO/IEC 9075-1 Framework (SQL/Framework)

  • ISO/IEC 9075-2 Foundation (SQL/Foundation)

  • ISO/IEC 9075-3 Call Level Interface (SQL/CLI)

  • ISO/IEC 9075-4 Persistent Stored Modules (SQL/PSM)

  • ISO/IEC 9075-9 Management of External Data (SQL/MED)

  • ISO/IEC 9075-10 Object Language Bindings (SQL/OLB)

  • ISO/IEC 9075-11 Information and Definition Schemas (SQL/Schemata)

  • ISO/IEC 9075-13 Routines and Types using the Java Language (SQL/JRT)

  • ISO/IEC 9075-14 XML-related specifications (SQL/XML)

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

PostgreSQL поддерживает большинство главных возможностей SQL:2008. Из свыше 179 обязательных возможностей, требуемых для полной совместимости "Core", PostgreSQL соответствует по крайней мере 160. Кроме того, существует длинный список поддерживаемых необязательных возможностей. Возможно это и не имеет значение, но в момент написания этих слов, ни одна текущая версия, ни одной СУБД, не соответствует полностью "Core" SQL:2008.

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

Note: Коды возможностей, содержащие дефис являются подвозможностями. Так, если отдельная подвозможность нереализована, основная возможность указывается как неподдерживаемая, даже если некоторые другие её подвозможности поддерживаются.

Back to top

(С) Виктор Вислобоков, 2008-2023