Tarantool CE/EE Documentation portal logo
Помощь
Обновлена 15 сентября 2026 г. в 08:55

Возможности SQL

В этом разделе возможности Tarantool сравниваются с разделом «Feature taxonomy and definition for mandatory features» стандарта SQL:2016.

Для каждой возможности из этого списка приведен простой пример SQL-запроса. Если Tarantool успешно обрабатывает пример, он помечается как «OK», в противном случае — как «No».

E011, числовые типы данных

Идентификатор

Возможность

Пример

Тесты

E011-01

INTEGER и SMALLINT

CREATE TABLE t (s1 INT PRIMARY KEY);

ОК.

E011-02

Типы данных REAL, DOUBLE PRECISION и FLOAT

CREATE TABLE tr (s1 FLOAT PRIMARY KEY);

Нет. Тип данных с плавающей точкой в Tarantool — DOUBLE. Примечание: Совместимость типов SQL с плавающей точкой между релизами 2.1 и 2.2 не планируется. Причина в том, что в 2.1 для колонок этих типов устанавливается формат 'number', а в 2.2 он будет ограничен до 'float32' и 'float64'. Изменение формата требует миграции данных и не может быть выполнено автоматически, так как в 2.1 нет информации, позволяющей отличить колонки 'number' (созданные из Lua) от колонок FLOAT/DOUBLE/REAL (созданных из SQL).

E011-03

Типы данных DECIMAL и NUMERIC

CREATE TABLE td (s1 NUMERIC PRIMARY KEY);

Нет, типы данных NUMERIC не поддерживаются, хотя тип данных DECIMAL поддерживается.

E011-04

Арифметические операторы

SELECT 10+1, 9-2, 8*3, 7/2 FROM t;

ОК.

E011-05

Числовые сравнения

SELECT * FROM t WHERE 1 < 2;

ОК.

E011-06

Неявное приведение между числовыми типами данных

SELECT * FROM t WHERE s1 = 1.00;

ОК, так как в Tarantool допускается сравнение 1.00 со колонкой типа INTEGER.

E021, типы символьных строк

ID

Возможность

Пример

Тесты

E021-01

Символьный тип данных (включая все варианты написания)

CREATE TABLE t44 (s1 CHAR PRIMARY KEY);

Нет, CHAR не поддерживается. Этот тип неподдерживаемых возможностей учитывается только один раз.

E021-02

Тип данных CHARACTER VARYING (включая все варианты написания)

CREATE TABLE t45 (s1 VARCHAR PRIMARY KEY);

Нет, в Tarantool допускается только VARCHAR(n), что является синонимом STRING.

E021-03

Символьные литералы

INSERT INTO t45 VALUES ('');

ОК, при этом исключается плохая практика использования "" в качестве символьных литералов.

E021-04

Функция CHARACTER_LENGTH

SELECT character_length(s1) FROM t;

ОК. Tarantool рассматривает это как синоним LENGTH().

E021-05

OCTET_LENGTH

SELECT octet_length(s1) FROM t;

Нет. Такой функции нет.

E021-06

Функция SUBSTRING

SELECT substring(s1 FROM 1 FOR 1) FROM t;

Нет. Такой функции нет. Есть функция SUBSTR(x,n,n), которая поддерживается.

E021-07

Конкатенация символов

SELECT 'a' || 'b' FROM t;

ОК.

E021-08

Функции UPPER и LOWER

SELECT upper('a'),lower('B') FROM t;

ОК. Tarantool поддерживает как UPPER(), так и LOWER().

E021-09

Функция TRIM

SELECT trim('a ') FROM t;

ОК.

E021-10

Неявное приведение типов между символьными строками фиксированной и переменной длины

SELECT * FROM tm WHERE char_column > varchar_column;

Нет, символьного типа строк фиксированной длины не существует.

E021-11

Функция POSITION

SELECT position(x IN y) FROM z;

Нет. Функция POSITION в Tarantool требует ',' вместо 'IN'.

E021-12

Сравнение символов

SELECT * FROM t WHERE s1 > 'a';

ОК. Следует отметить, что по умолчанию при сравнении используется двоичное правило сортировки, но можно легко использовать предложение COLLATE.

E031, идентификаторы

Идентификатор

Возможность

Пример

Тесты

E031

Идентификаторы

CREATE TABLE rank (ceil INT PRIMARY KEY);

Нет. Список зарезервированных слов в Tarantool отличается от списка зарезервированных слов стандарта.

E031-01

Идентификаторы с разделителями

CREATE TABLE "t47" (s1 INT PRIMARY KEY);

ОК. Кроме того, заключение идентификаторов в двойные кавычки означает, что они не будут преобразованы в верхний или нижний регистр — такое поведение отсутствует в некоторых других СУБД.

E031-02

Идентификаторы в нижнем регистре

CREATE TABLE t48 (s1 INT PRIMARY KEY);

ОК.

E031-03

Завершающий знак подчеркивания

CREATE TABLE t49_ (s1 INT PRIMARY KEY);

ОК.

E051, базовые запросы

ID функции

Функция

Пример

Тесты

E051-01

SELECT DISTINCT

SELECT DISTINCT s1 FROM t;

OK.

E051-02

Предложение GROUP BY

SELECT DISTINCT s1 FROM t GROUP BY s1;

OK.

E051-04

GROUP BY может содержать колонки, не входящие в список выборки

SELECT s1 FROM t GROUP BY lower(s1);

OK.

E051-05

Элементы списка выборки могут быть переименованы

SELECT s1 AS K FROM t ORDER BY K;

OK.

E051-06

Предложение HAVING

SELECT count(*) FROM t HAVING count(*) > 0;

OK. Tarantool поддерживает HAVING, и GROUP BY не является обязательным перед HAVING.

E051-07

Квалифицированная * в списке SELECT

SELECT t.* FROM t;

OK.

E051-08

Корреляционные имена в предложении FROM

SELECT * FROM t AS K;

OK.

E051-09

Переименование колонок в предложении FROM

SELECT * FROM t AS x(q,c);

Нет.

E061, базовые предикаты и условия поиска

ID

Возможность

Пример

Тесты

E061-01

Предикат сравнения

SELECT * FROM t WHERE 0 = 0;

OK.

E061-02

Предикат BETWEEN

SELECT * FROM t WHERE ' ' BETWEEN '' AND ' ';

OK.

E061-03

Предикат IN со списком значений

SELECT * FROM t WHERE s1 IN ('a', upper('a'));

OK.

E061-04

Предикат LIKE

SELECT * FROM t WHERE s1 LIKE '_';

OK.

E061-05 Предикат LIKE: предложение ESCAPE

VALUES ('abc_' LIKE 'abcX_' ESCAPE 'X');

OK.

E061-06

Предикат NULL

SELECT * FROM t WHERE s1 IS NOT NULL;

OK.

E061-07

Квантифицированный предикат сравнения

SELECT * FROM t WHERE s1 = ANY (SELECT s1 FROM t);

Нет. Синтаксическая ошибка.

E061-08

Предикат EXISTS

SELECT * FROM t WHERE NOT EXISTS (SELECT * FROM t);

OK.

E061-09

Подзапросы в предикате сравнения

SELECT * FROM t WHERE s1 > (SELECT s1 FROM t);

OK.

E061-11

Подзапросы в предикате IN

SELECT * FROM t WHERE s1 IN (SELECT s1 FROM t);

OK.

E061-12

Подзапросы в квантифицированном предикате сравнения

SELECT * FROM t WHERE s1 >= ALL (SELECT s1 FROM t);

Нет. Синтаксическая ошибка.

E061-13

Коррелированные подзапросы

SELECT * FROM t WHERE s1 = (SELECT s1 FROM t2 WHERE t2.s2 = t.s1);

OK.

E061-14

E071, базовые выражения с запросами

Идентификатор

Возможность

Пример

Тесты

E071-01

Табличный оператор UNION DISTINCT

SELECT * FROM t UNION DISTINCT SELECT * FROM t;

Нет. Однако SELECT * FROM t UNION SELECT * FROM t; поддерживается.

E071-02

Табличный оператор UNION ALL

SELECT * FROM t UNION ALL SELECT * FROM t;

Поддерживается.

E071-03

Табличный оператор EXCEPT DISTINCT

SELECT * FROM t EXCEPT DISTINCT SELECT * FROM t;

Нет. Однако SELECT * FROM t EXCEPT SELECT * FROM t; поддерживается.

E071-05

Колонки, объединяемые табличными операторами, не обязаны иметь одинаковый тип данных

SELECT s1 FROM t UNION SELECT 5 FROM t;

Поддерживается.

E071-06

Табличные операторы в подзапросах

SELECT * FROM t WHERE 'a' IN (SELECT * FROM t UNION SELECT * FROM t);

Поддерживается.

E081, базовые права

Tarantool не поддерживает права, кроме как через NoSQL.

E091, агрегатные функции

ID

Возможность

Пример

Тесты

E091-01

AVG

SELECT avg(s1) FROM t7;

Нет. Tarantool поддерживает AVG, но отсутствует предупреждение об исключении NULL-значений.

E091-02

COUNT

SELECT count(*) FROM t7 WHERE s1 > 0;

OK.

E091-03

MAX

SELECT max(s1) FROM t7 WHERE s1 > 0;

OK.

E091-04

MIN

SELECT min(s1) FROM t7 WHERE s1 > 0;

OK.

E091-05

SUM

SELECT sum(1) FROM t7 WHERE s1 > 0;

OK.

E091-06

квантор ALL

SELECT sum(ALL s1) FROM t7 WHERE s1 > 0;

OK.

E091-07

квантор DISTINCT

SELECT sum(DISTINCT s1) FROM t7 WHERE s1 > 0;

OK.

E101, базовая обработка данных

ID

Возможность

Пример

Тесты

E101-01

Инструкция INSERT

INSERT INTO t (s1,s2) VALUES (1,''), (2,NULL), (3,55);

OK.

E101-03

Инструкция UPDATE с поиском

UPDATE t SET s1 = NULL WHERE s1 IN (SELECT s1 FROM t2);

OK.

E101-04

Инструкция DELETE с поиском

DELETE FROM t WHERE s1 IN (SELECT s1 FROM t);

OK.

E111, инструкция SELECT, возвращающая одну строку

ID

Возможность

Пример

Тесты

E111

Инструкция SELECT, возвращающая одну строку

SELECT count(*) FROM t;

ОК.

E121, базовая поддержка курсоров

Feature ID

Функция

Пример

Тесты

E121-01

DECLARE CURSOR

Нет. Tarantool не поддерживает курсоры.

E121-02

Колонки в ORDER BY не обязательно должны присутствовать в списке выборки

SELECT s1 FROM t ORDER BY s2;

Поддерживается.

E121-03

Выражения со значениями в предложении ORDER BY

SELECT s1 FROM t7 ORDER BY -s1;

Поддерживается.

E121-04

Оператор OPEN

Нет. Tarantool не поддерживает курсоры.

E121-06

Позиционный оператор UPDATE

Нет. Tarantool не поддерживает курсоры.

E121-07

Позиционный оператор DELETE

Нет. Tarantool не поддерживает курсоры.

E121-08

Оператор CLOSE

Нет. Tarantool не поддерживает курсоры.

E121-10

Неявный NEXT в операторе FETCH

Нет. Tarantool не поддерживает курсоры.

E121-17

Курсоры WITH HOLD

E131, поддержка значения Null

Идентификатор

Возможность

Пример

Тесты

E131

Поддержка значения NULL (NULL вместо значений)

SELECT s1 FROM t7 WHERE s1 IS NULL;

OK.

E141, базовые ограничения целостности

ID

Возможность

Пример

Тесты

E141-01

Ограничения NOT NULL

CREATE TABLE t8 (s1 INT PRIMARY KEY, s2 INT NOT NULL);

OK.

E141-02

Ограничения UNIQUE для колонок NOT NULL

CREATE TABLE t9 (s1 INT PRIMARY KEY , s2 INT NOT NULL UNIQUE);

OK.

E141-03

Ограничения PRIMARY KEY

CREATE TABLE t10 (s1 INT PRIMARY KEY);

OK, хотя Tarantool не должен всегда требовать наличия первичного ключа.

E141-04

Базовое ограничение FOREIGN KEY со значением по умолчанию NO ACTION для действий удаления и обновления ссылок

CREATE TABLE t11 (s0 INT PRIMARY KEY, s1 INT REFERENCES t10);

OK.

E141-06

Ограничения CHECK

CREATE TABLE t12 (s1 INT PRIMARY KEY, s2 INT, CHECK (s1 = s2));

OK.

E141-07

Значения по умолчанию для колонок

CREATE TABLE t13 (s1 INT PRIMARY KEY, s2 INT DEFAULT -1);

OK.

E141-08

NOT NULL, выводимое из первичного ключа

CREATE TABLE t14 (s1 INT PRIMARY KEY);

OK. Вставить NULL не удается, хотя явно не указано, что колонка имеет ограничение NOT NULL.

E141-10

Имена во внешнем ключе можно указывать в любом порядке

CREATE TABLE t15 (s1 INT, s2 INT, PRIMARY KEY (s1,s2)); CREATE TABLE t16 (s1 INT PRIMARY KEY, s2 INT, FOREIGN KEY (s2,s1) REFERENCES t15 (s1,s2));

OK.

E151, поддержка транзакций

Идентификатор

Возможность

Пример

Тесты

E151-01

Инструкция COMMIT

COMMIT;

Нет. Tarantool поддерживает COMMIT, но сначала необходимо выполнить START TRANSACTION.

E151-02

Инструкция ROLLBACK

ROLLBACK;

Да.

E152, базовая инструкция SET TRANSACTION

Feature ID

Feature

Example

Tests

E152-01 Оператор SET TRANSACTION: предложение ISOLATION SERIALIZABLE

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

Нет. Синтаксическая ошибка.

E152-02 Оператор SET TRANSACTION: предложения READ ONLY и READ WRITE

E*, прочее

ID

Возможность

Пример

Тесты

E153

Обновляемые запросы с подзапросами

UPDATE "view_containing_subquery" SET column1=0;

Нет.

E161

SQL-комментарии с использованием двойного минуса

--comment;

ОК.

E171

Поддержка SQLSTATE

DROP TABLE no_such_table;

Нет. Tarantool возвращает сообщение об ошибке, но не строку SQLSTATE.

F021, базовая информационная схема

ID функции

Функция

Пример

Тесты

F021

Базовая информационная схема

SELECT * from information_schema.tables;

Нет. Метаданные Tarantool не находятся в схеме с таким именем (не учитывается в итоговом балле).

F031, базовые манипуляции со схемой

Feature ID

Feature

Example

Tests

F031-01

Инструкция CREATE TABLE для создания постоянных базовых таблиц

CREATE TABLE t20 (t20_1 INT NOT NULL);

Нет. Необходимо всегда указывать PRIMARY KEY (этот недостаток учитывается только один раз).

F031-02

Инструкция CREATE VIEW

CREATE VIEW t21 AS SELECT * FROM t20;

OK.

F031-03

Оператор GRANT

Нет. В Tarantool привилегии поддерживаются только через NoSQL.

F031-04 Оператор ALTER TABLE: добавление колонки

ALTER TABLE t7 ADD COLUMN t7_2 VARCHAR(1) DEFAULT 'q';

Да. В Tarantool поддерживается ALTER TABLE, а поддержка ADD COLUMN добавлена в Tarantool 2.7.

F031-13 Оператор DROP TABLE: предложение RESTRICT

DROP TABLE t20 RESTRICT;

Нет. В Tarantool поддерживается DROP TABLE, но это предложение не поддерживается.

F031-16 Оператор DROP VIEW: предложение RESTRICT

DROP VIEW v2 RESTRICT;

Нет. В Tarantool поддерживается DROP VIEW, но это предложение не поддерживается.

F041, базовое объединение таблиц

Идентификатор

Возможность

Пример

Тесты

F041-01

Внутреннее соединение, не обязательно с ключевым словом INNER

SELECT a.s1 FROM t7 a JOIN t7 b;

OK.

F041-02

Ключевое слово INNER

SELECT a.s1 FROM t7 a INNER JOIN t7 b;

OK.

F041-03

LEFT OUTER JOIN

SELECT t7.*,t22.* FROM t22 LEFT OUTER JOIN t7 ON (t22_1 = s1);

OK.

F041-04

RIGHT OUTER JOIN

SELECT t7.*,t22.* FROM t22 RIGHT OUTER JOIN t7 ON (t22_1 = s1);

Нет. Ошибка синтаксиса.

F041-05

Внешние соединения могут быть вложенными

SELECT t7.*,t22.* FROM t22 LEFT OUTER JOIN t7 ON (t22_1 = s1) LEFT OUTER JOIN t23;

OK.

F041-07

Внутренняя таблица в левом или правом внешнем соединении может также использоваться во внутреннем соединении

SELECT t7.* FROM (t22 LEFT OUTER JOIN t7 ON (t22_1 = s1)) j INNER JOIN t22 ON (j.t22_4 = t7.s1);

OK.

F041-08

Поддерживаются все операторы сравнения

SELECT * FROM t WHERE 0 = 1 OR 0 > 1 OR 0 < 1 OR 0 <> 1;

OK.

F051, базовая поддержка даты и времени

ID функции

Функция

Пример

Тесты

F051-01

Тип данных DATE (включая поддержку литерала DATE)

CREATE TABLE dates (s1 DATE);

Нет. Tarantool не поддерживает тип данных DATE.

F051-02

Тип данных TIME (включая поддержку литерала TIME)

CREATE TABLE times (s1 TIME DEFAULT TIME '1:2:3');

Нет. Синтаксическая ошибка.

F051-03

Тип данных TIMESTAMP (включая поддержку литерала TIMESTAMP)

CREATE TABLE timestamps (s1 TIMESTAMP);

Нет. Синтаксическая ошибка.

F051-04

Предикат сравнения для типов данных DATE, TIME и TIMESTAMP

SELECT * FROM dates WHERE s1 = s1;

Нет. Типы данных даты и времени не поддерживаются.

F051-05

Явное приведение (CAST) между типами даты-времени и строковыми типами

SELECT cast(s1 AS VARCHAR(10)) FROM dates;

Нет. Типы данных даты и времени не поддерживаются.

F051-06

CURRENT_DATE

SELECT current_date FROM t;

Нет. Синтаксическая ошибка.

F051-07

LOCALTIME

SELECT localtime FROM t;

Нет. Синтаксическая ошибка.

F051-08

LOCALTIMESTAMP

SELECT localtimestamp FROM t;

Нет. Синтаксическая ошибка.

F081, UNION и EXCEPT в представлениях

ID функции

Функция

Пример

Тесты

F081

UNION и EXCEPT в представлениях

CREATE VIEW vv AS SELECT * FROM t7 EXCEPT SELECT * * FROM t15;

OK.

F131, операции группировки

Идентификатор

Возможность

Пример

Тесты

F131-01

Предложения WHERE, GROUP BY и HAVING поддерживаются в запросах с сгруппированными представлениями

CREATE VIEW vv2 AS SELECT * FROM vv GROUP BY s1;

OK.

F131-02

Несколько таблиц поддерживаются в запросах с сгруппированными представлениями

CREATE VIEW vv3 AS SELECT * FROM vv2,t30;

OK.

F131-03

Функции множеств поддерживаются в запросах с сгруппированными представлениями

CREATE VIEW vv4 AS SELECT count(*) FROM vv2;

OK.

F131-04

Подзапросы с предложениями GROUP BY и HAVING и сгруппированные представления

CREATE VIEW vv5 AS SELECT count(*) FROM vv2 GROUP BY s1 HAVING count(*) > 0;

OK.

F131-05

Однострочный SELECT с предложениями GROUP BY и HAVING и сгруппированными представлениями

SELECT count(*) FROM vv2 GROUP BY s1 HAVING count(*) > 0;

OK.

F181, поддержка нескольких модулей

Нет. В Tarantool нет модулей.

F201, функция CAST

ID

Возможность

Пример

Тесты

F201

Функция CAST

SELECT cast(s1 AS INT) FROM t;

OK.

F221, явно заданное значение по умолчанию

ID

Возможность

Пример

Тесты

F221

Явные значения по умолчанию

UPDATE t SET s1 = DEFAULT;

Нет. Синтаксическая ошибка.

F261, выражение CASE

ID

Возможность

Пример

Тесты

F261-01

Простой CASE

SELECT CASE WHEN 1 = 0 THEN 5 ELSE 7 END FROM t;

ОК.

F261-02

Поисковый CASE

SELECT CASE 1 WHEN 0 THEN 5 ELSE 7 END FROM t;

ОК.

F261-03

NULLIF

SELECT nullif(s1,7) FROM t;

ОК

F261-04

COALESCE

SELECT coalesce(s1,7) FROM t;

ОК.

F311, инструкция определения схемы

Идентификатор

Возможность

Тесты

F311-01

CREATE SCHEMA

Нет. В Tarantool нет схем или баз данных.

F311-02

CREATE TABLE for persistent base tables

Нет. В Tarantool нет CREATE TABLE внутри CREATE SCHEMA.

F311-03

CREATE VIEW

Нет. В Tarantool нет CREATE VIEW внутри CREATE SCHEMA.

F311-04 CREATE VIEW: WITH CHECK OPTION

Нет. В Tarantool нет CREATE VIEW внутри CREATE SCHEMA.

F311-05

F*, прочее

ID функции

Функция

Пример

Тесты

F471

Скалярные значения подзапроса

SELECT s1 FROM t WHERE s1 = (SELECT count(*) FROM t);

ОК.

F481

Расширенный предикат NULL

SELECT * FROM t WHERE row(s1,s1) IS NOT NULL;

Нет. Синтаксическая ошибка.

S011, пользовательские типы

ID

Возможность

Пример

Тесты

S011

Различаемые типы

CREATE TYPE x AS FLOAT;

Нет. Tarantool не поддерживает различаемые типы.

T321, базовые процедуры, вызываемые SQL

Feature ID

Feature

Example

Tests

T321-01

Пользовательские функции без перегрузки

CREATE FUNCTION f() RETURNS INT RETURN 5;

Нет. Пользовательские функции для SQL создаются в Lua с другим синтаксисом.

T321-02

Пользовательские процедуры без перегрузки

CREATE PROCEDURE p() BEGIN END;

Нет. Пользовательские функции для SQL создаются в Lua с другим синтаксисом.

T321-03

Вызов функции

SELECT f(1) FROM t;

Да. Tarantool может вызывать пользовательские функции Lua.

T321-04

Оператор CALL

CALL p();

Нет. Tarantool не поддерживает операторы CALL.

T321-05

Оператор RETURN

CREATE FUNCTION f() RETURNS INT RETURN 5;

Нет. Tarantool не поддерживает операторы RETURN.

T*, прочее

ID

Возможность

Пример

Тесты

T631

Предикат IN с одним элементом списка

SELECT * FROM t WHERE 1 IN (1);

OK.

Общее количество элементов, отмеченных «No»: 67

Общее количество элементов, отмеченных «OK»: 79