Перейти к содержанию

Совместимость с ANSI

Приведенные в таблице возможности Picodata SQL соответствуют требованиям стандарта SQL:2016, а именно ISO/IEC 9075:2016 «Информационные технологии — Языки баз данных — SQL».

Легенда

E001-01—возможность полностью реализована
E001-01—возможность частично реализована
E001-01—возможность не реализована

Обязательные возможности

Идентификатор Наименование Поддержка Примечание
E011 Числовые типы данных
E011-01 Типы данных INTEGER и SMALLINT (включая все варианты написания) INTEGER, INT, SMALLINT SMALLINT, INT2, INT4, INT8 и BIGINT — синонимы 64-битного INTEGER
E011-02 Типы данных REAL, DOUBLE PRECISION и FLOAT DOUBLE, FLOAT8 REAL, DOUBLE PRECISION и FLOAT не поддерживаются; доступны DOUBLE и его синоним FLOAT8
E011-03 Типы данных DECIMAL и NUMERIC DECIMAL, NUMERIC NUMERIC — синоним DECIMAL. Указанные в объявлении точность и масштаб не ограничивают сохраняемые значения
E011-04 Арифметические операторы Унарные плюс и минус допустимы только в числовых литералах; выражения вида -a и -(1 + 2) не поддерживаются
E011-05 Числовые сравнения
E011-06 Неявное приведение числовых типов данных Числовые типы неявно приводятся в выражениях и сравнениях. При записи в колонку тип значения должен совпадать с типом колонки: например, вставка 6. в колонку INTEGER отклоняется
E021 Типы символьных строк
E021-01 Тип данных CHARACTER (включая все варианты написания) Строковые типы фиксированной длины CHARACTER и CHAR не поддерживаются; используйте TEXT или VARCHAR
E021-02 Тип данных CHARACTER VARYING (включая все варианты написания) TEXT, STRING, VARCHAR CHARACTER VARYING и CHAR VARYING не поддерживаются. VARCHAR — синоним TEXT; ограничение длины VARCHAR(n) не применяется
E021-03 Символьные литералы
E021-04 Функция CHARACTER_LENGTH
E021-05 Функция OCTET_LENGTH
E021-06 Функция SUBSTRING Поддерживаются варианты FROM/FOR и поиск по регулярным выражениям. Числовые варианты используют SUBSTR; предложение USING не поддерживается
E021-07 Конкатенация символов
E021-08 Функции UPPER и LOWER
E021-09 Функция TRIM TRIM Форма TRIM(FROM x) без направления и удаляемых символов не поддерживается; используйте TRIM(x)
E021-10 Неявное приведение между типами символьных строк фиксированной и переменной длины
E021-11 Функция POSITION
E021-12 Сравнение символов
E031 Идентификаторы
E031-01 Идентификаторы с разделителями
E031-02 Идентификаторы в нижнем регистре
E031-03 Символ нижнего подчеркивания в конце
E051 Спецификация базовых запросов
E051-01 SELECT DISTINCT SELECT ->
SELECT DISTINCT
E051-02 Предложение GROUP BY SELECT ->
GROUP BY
E051-04 GROUP BY может содержать колонки не из списка выборки GROUP BY Колонки группировки можно не включать в список SELECT, например SELECT COUNT(*) FROM t GROUP BY x
E051-05 Элементы в списке выборки можно переименовывать
E051-06 Предложение HAVING SELECT ->
HAVING
E051-07 Допускается использование * в квалификаторе для списка выборки
E051-08 Корреляционные имена в предложении FROM
E051-09 Переименование колонок в предложении FROM Псевдоним таблицы поддерживается, список новых имен колонок после него — нет
E061 Базовые предикаты и условия поиска
E061-01 Предикат сравнения
E061-02 Предикат BETWEEN Выражение ->
BETWEEN
E061-03 Предикат IN со списком значений Выражение ->
IN
E061-04 Предикат LIKE LIKE Форма NOT LIKE не поддерживается; отрицание записывается как NOT (x LIKE y)
E061-05 Предикат LIKE: предложение ESCAPE
E061-06 Предикат NULL Выражение ->
NULL
E061-07 Предикат количественного сравнения
E061-08 Предикат EXISTS Выражение ->
EXISTS
E061-09 Подзапросы в предикате сравнения
E061-11 Подзапросы в предикате IN
E061-12 Подзапросы в предикате количественного сравнения
E061-13 Коррелирующие подзапросы
E061-14 Условие поиска
E071 Базовые выражения с запросами
E071-01 Табличный оператор UNION DISTINCT SELECT ->
UNION
UNION устраняет повторы, но явное ключевое слово DISTINCT после UNION не поддерживается
E071-02 Табличный оператор UNION ALL SELECT ->
UNION ALL
E071-03 Табличный оператор EXCEPT DISTINCT SELECT ->
EXCEPT [ DISTINCT ]
E071-05 Колонки, объединенные с помощью табличных операторов, необязательно должны иметь одинаковый тип данных
E071-06 Табличные операторы в подзапросах
E081 Базовые привилегии GRANT, REVOKE Используются привилегии READ, WRITE и EXECUTE. Отдельные права INSERT, UPDATE, DELETE, права на колонки, REFERENCES и WITH GRANT OPTION не поддерживаются
E091 Функции множеств
E091-01 AVG AVG
E091-02 COUNT COUNT
E091-03 MAX MAX
E091-04 MIN MIN
E091-05 SUM
E091-06 Квантификатор ALL Агрегаты учитывают повторы по умолчанию, но явное ключевое слово ALL в их аргументах не поддерживается
E091-07 Квантификатор DISTINCT DISTINCT
E101 Базовые операции с данными
E101-01 Инструкция INSERT INSERT
E101-03 Инструкция UPDATE с возможностью поиска UPDATE
E101-04 Инструкция DELETE с возможностью поиска DELETE
E111 Инструкция SELECT, возвращающая одну строку Речь об инструкции SELECT ... INTO, которая записывает результат в переменные; она не поддерживается
E121 Базовая поддержка курсоров
E121-01 DECLARE CURSOR
E121-02 Колонки ORDER BY необязательно должны быть в списке выборки ORDER BY разрешает ссылки на колонки результата SELECT; произвольные колонки исходной таблицы вне списка выборки недоступны
E121-03 Выражения значений в предложении ORDER BY ORDER BY Поддерживаются выражения над колонками результата SELECT. Отдельный параметр и выражения без ссылок на колонки или подзапросы отклоняются
E121-04 Инструкция OPEN
E121-06 Инструкция UPDATE с возможностью позиционирования
E121-07 Инструкция DELETE с возможностью позиционирования
E121-08 Инструкция CLOSE
E121-10 Инструкция FETCH: неявный NEXT
E121-17 Курсоры WITH HOLD
E131 Поддержка значения NULL (NULL вместо значений) NULL
E141 Базовые ограничения целостности
E141-01 Ограничения NOT NULL CREATE TABLE ->
[ NOT ] NULL
E141-02 Ограничения UNIQUE для колонок NOT NULL CREATE UNIQUE INDEX Уникальность обеспечивается отдельным индексом; ограничение UNIQUE в CREATE TABLE не поддерживается. Для шардированной таблицы уникальный индекс должен начинаться со всех колонок ключа шардирования
E141-03 Ограничения PRIMARY KEY CREATE TABLE ->
PRIMARY KEY
Первичный ключ гарантирует уникальность только в пределах одного экземпляра кластера. Глобально уникален ключ, который включает все колонки ключа шардирования
E141-04 Базовое ограничение FOREIGN KEY с параметром NO ACTION по умолчанию как для ссылочной операции удаления, так и для ссылочной операции обновления
E141-06 Ограничения CHECK
E141-07 Значения колонок по умолчанию
E141-08 Ограничения NOT NULL неявно используются с ограничениями PRIMARY KEY CREATE TABLE ->
PRIMARY KEY
E141-10 Имена во внешнем ключе могут указываться в любом порядке
E151 Поддержка транзакций
E151-01 Инструкция COMMIT Ограничения транзакций COMMIT принимается как заглушка. Атомарное выполнение нескольких запросов доступно через транзакционный блок DO
E151-02 Инструкция ROLLBACK Ограничения транзакций ROLLBACK принимается как заглушка. Атомарное выполнение нескольких запросов доступно через транзакционный блок DO
E152 Базовая инструкция SET TRANSACTION
E152-01 Инструкция SET TRANSACTION: предложение ISOLATION LEVEL SERIALIZABLE SET TRANSACTION принимается, но не изменяет параметры транзакции
E152-02 Инструкция SET TRANSACTION: предложения READ ONLY и READ WRITE SET TRANSACTION принимается, но не изменяет параметры транзакции
E153 Обновляемые запросы с подзапросами
E161 Комментарии SQL, начинающиеся с двойного минуса Серверный SQL-парсер не принимает комментарии. Удаление комментариев клиентом, например psql, не является поддержкой на сервере
E171 Поддержка SQLSTATE Протокол PostgreSQL Ответы об ошибках содержат пятисимвольные коды SQLSTATE. Набор кодов ограничен; многие ошибки SQL возвращаются как XX000 (internal_error)
E182 Привязка к языку хоста
F021 Базовая информационная схема Представления INFORMATION_SCHEMA отсутствуют; метаданные доступны в системных таблицах
F031 Базовые операции со схемой
F031-01 Инструкция CREATE TABLE для создания постоянных базовых таблиц CREATE TABLE Первичный ключ обязателен: таблицу без PRIMARY KEY создать нельзя
F031-02 Инструкция CREATE VIEW
F031-03 Инструкция GRANT GRANT Используются привилегии Picodata (READ, WRITE и другие, см. E081); стандартные привилегии SELECT, INSERT, UPDATE и DELETE не поддерживаются
F031-04 Инструкция ALTER TABLE: предложение ADD COLUMN ALTER TABLE
F031-13 Инструкция DROP TABLE: предложение RESTRICT DROP TABLE Предложение RESTRICT не поддерживается
F031-16 Инструкция DROP VIEW: предложение RESTRICT
F031-19 Инструкция REVOKE: предложение RESTRICT REVOKE Предложение RESTRICT не поддерживается
F041 Базовая объединенная таблица
F041-01 Внутреннее соединение (ключевое слово INNER необязательно) SELECT ->
[ INNER ] JOIN
F041-02 Ключевое слово INNER SELECT ->
INNER JOIN
F041-03 LEFT OUTER JOIN SELECT ->
LEFT OUTER JOIN
F041-04 RIGHT OUTER JOIN
F041-05 Внешние соединения могут быть вложенными SELECT —
Множественные
соединения
F041-07 Таблица, полученная левым или правым внешним соединением, может быть использована во внутреннем соединении JOIN Таблица с NULL-дополнением в LEFT JOIN может участвовать в последующем INNER JOIN. RIGHT JOIN не поддерживается
F041-08 Поддерживаются все операторы сравнения (не только обычное равенство)
F051 Базовая поддержка даты и времени
F051-01 Тип данных DATE (включая поддержку литерала DATE) DATETIME, типизированные литералы Тип DATE и литерал DATE '...' не поддерживаются. Доступны DATETIME и литерал DATETIME '...'
F051-02 Тип данных TIME (включая поддержку литерала TIME) с минимальной точностью дробной части секунд в 0 знаков
F051-03 Тип данных TIMESTAMP (включая поддержку литерала TIMESTAMP) с минимальной точностью дробной части секунд в 0 и 6 знаков Тип TIMESTAMP и литерал TIMESTAMP не поддерживаются; для хранения даты и времени используется DATETIME
F051-04 Предикат сравнения для типов данных DATE, TIME и TIMESTAMP DATETIME Сравнивать значения DATETIME можно; стандартные типы DATE, TIME и TIMESTAMP отсутствуют
F051-05 Явное приведение с помощью CAST между типами даты и времени и типами символьных строк CAST, DATETIME Поддерживается приведение между DATETIME и TEXT. Стандартные типы DATE, TIME и TIMESTAMP отсутствуют
F051-06 Функция CURRENT_DATE CURRENT_DATE Возвращает DATETIME со временем 00:00:00, а не DATE
F051-07 LOCALTIME
F051-08 LOCALTIMESTAMP LOCALTIMESTAMP Возвращает DATETIME с часовым поясом; результат совпадает с CURRENT_TIMESTAMP
F081 UNION и EXCEPT в представлениях
F131 Операции со сгруппированными представлениями
F131-01 Предложения WHERE, GROUP BY и HAVING поддерживаются в запросах со сгруппированными представлениями
F131-02 Несколько таблиц поддерживаются в запросах со сгруппированными представлениями
F131-03 Агрегатные функции поддерживаются в запросах со сгруппированными представлениями
F131-04 Подзапросы с предложениями GROUP BY и HAVING и сгруппированными представлениями Подзапросы с GROUP BY и HAVING поддерживаются; представлений нет
F131-05 Инструкция SELECT, возвращающая одну строку, с предложениями GROUP BY и HAVING и сгруппированными представлениями
F181 Поддержка нескольких модулей
F201 Функция CAST CAST
F221 Явные значения по умолчанию
F261 Выражение CASE
F261-01 Простое выражение CASE CASE —
Простое
выражение CASE
F261-02 Выражение CASE с условиями CASE —
Выражение CASE
с условиями
F261-03 NULLIF
F261-04 COALESCE COALESCE
F311 Инструкция определения схемы
F311-01 CREATE SCHEMA CREATE SCHEMA принимается как заглушка и не создает схему
F311-02 CREATE TABLE для постоянных базовых таблиц Самостоятельная команда CREATE TABLE поддерживается (F031-01); создание таблиц внутри CREATE SCHEMA не поддерживается
F311-03 CREATE VIEW
F311-04 CREATE VIEW: WITH CHECK OPTION
F311-05 Инструкция GRANT Самостоятельная команда GRANT поддерживается (F031-03); выдача привилегий внутри CREATE SCHEMA не поддерживается
F471 Скалярные подзапросы Подзапрос, возвращающий одно значение, можно использовать в выражениях, например SELECT a + (SELECT MAX(b) FROM t2) FROM t1. Коррелированные подзапросы не поддерживаются (E061-13)
F481 Расширенный предикат NULL IS NULL применим к любому скалярному выражению; проверка строки из нескольких значений, например (a, b) IS NULL, не поддерживается
F501 Представления возможностей и соответствия стандарту
F812 Базовая диагностика отклонений от стандарта
S011 Пользовательские типы данных
T321 Базовые подпрограммы, вызываемые SQL
T321-01 Пользовательские функции без перегрузки
T321-02 Пользовательские хранимые процедуры без перегрузки Параметры задаются только типами, без имен и режимов IN, OUT, INOUT. Тело процедуры — одна команда INSERT, UPDATE или DELETE
T321-03 Вызов функции
T321-04 Инструкция CALL CALL Аргументами могут быть только литералы и параметры запроса, например CALL p(1, $1); выражения вроде 1 + 2 не допускаются
T321-05 Инструкция RETURN RETURN QUERY RETURN QUERY в блоке DO добавляет строки к результату и не завершает блок. Стандартная инструкция RETURN не реализована
T321-06 Представление ROUTINES
T321-07 Представление PARAMETERS
T631 Предикат IN с одним элементом списка

Необязательные возможности

Идентификатор Наименование Поддержка Примечание
F200 Инструкция TRUNCATE TABLE TRUNCATE TABLE
F321 Авторизация пользователя CURRENT_USER, управление доступом CURRENT_USER возвращает имя пользователя, с привилегиями которого выполняется запрос. SESSION_USER, SYSTEM_USER и SET SESSION AUTHORIZATION не поддерживаются
F571 Проверка истинности значений Выражение IS [NOT] TRUE, IS [NOT] FALSE, IS [NOT] UNKNOWN
F641 Конструкторы строк и таблиц VALUES Поддерживаются VALUES с несколькими строками и строки значений в сравнениях и IN, например (a, b) = (1, 2). Строку нельзя использовать как самостоятельное значение
F850 ORDER BY в запросе верхнего уровня SELECT ->
ORDER BY
Поддерживаются ASC, DESC, NULLS FIRST и NULLS LAST; ограничения ссылок на колонки описаны в E121-02 и E121-03
F851 ORDER BY в подзапросах ORDER BY допускается в подзапросах и CTE
S091 Базовая поддержка массивов ARRAY, литералы массивов Поддерживаются одномерные массивы встроенных типов и ARRAY[...]. Массивы нельзя сравнивать и использовать как ключи шардирования; пользовательские типы элементов отсутствуют
T031 Тип данных BOOLEAN BOOLEAN, BOOL
T121 WITH (без RECURSIVE) в запросе CTE Рекурсивные CTE (WITH RECURSIVE) не поддерживаются
T331 Базовые роли Команда SET ROLE для смены активной роли не поддерживается
T441 Функции ABS и MOD ABS Функции MOD нет; остаток от деления вычисляет оператор %
T611 Элементарные операции OLAP (оконные функции) Поддерживаются агрегатные оконные функции, ROW_NUMBER, PARTITION BY, ORDER BY, рамки ROWS и RANGE и именованные окна (WINDOW). Функций RANK и DENSE_RANK нет
T617 Функции FIRST_VALUE и LAST_VALUE LAST_VALUE Функции FIRST_VALUE нет

Дополняющие стандарт возможности

Идентификатор Наименование Поддержка Примечание
— Тип данных TEXT TEXT, STRING
— Тип данных UUID UUID
— Тип данных JSON JSON
— Тип данных UNSIGNED UNSIGNED Целое число не меньше 0; используется только в определениях колонок
— GROUP_CONCAT GROUP_CONCAT
— STRING_AGG STRING_AGG
— CREATE INDEX CREATE INDEX
— DROP INDEX DROP INDEX
— LIMIT SELECT ->
LIMIT
Стандартные OFFSET и FETCH FIRST не поддерживаются
— INDEXED BY INDEXED BY
— ALTER SYSTEM ALTER SYSTEM
— ALTER USER ALTER USER
— CREATE USER CREATE USER
— DROP USER DROP USER
— EXPLAIN EXPLAIN
— TO_CHAR TO_CHAR
— TO_DATE TO_DATE
— CURRENT_TIMESTAMP CURRENT_TIMESTAMP Возвращает DATETIME с часовым поясом
— ILIKE ILIKE
— ALTER INDEX ALTER INDEX Переименование индекса
— JSON_EXTRACT_PATH JSON_EXTRACT_PATH Извлечение значения JSON по пути; не заменяет стандартные операторы SQL/JSON
— Транзакционные блоки DO Транзакции Атомарное выполнение в пределах одного узла и общего бакета; доступны LET, IF/ELSE и RETURN QUERY. Действуют ограничения
— INSERT ON CONFLICT DO UPDATE ON CONFLICT DO UPDATE Поддерживается внутри транзакционных блоков для шардированных таблиц; действуют ограничения на вставку и обновление
— DISCARD DISCARD Очистка локальных кешей SQL на инстансе
— Функции Picodata Функции Сведения о кластере и инстансе: PICO_INSTANCE_NAME, PICO_LOG_LEVEL, PICO_INSTANCE_HEALTH_STATUS и другие