Транзакции¶
В Picodata поддерживаются транзакции — блоки команд. В рамках транзакции пользователь может выполнить несколько SQL-запросов атомарно — так, как если бы это был единый запрос. Для транзакционных запросов действуют ограничения.
Структура¶
Транзакционный блок представляет собой запрос вида DO $$ BEGIN ... END $$;,
внутри которого можно поместить набор вложенных запросов. Такой блок
функционально является неименованной процедурой.
Поддерживаемые команды исполнения¶
На данный момент для транзакционных блоков поддерживаются следующие команды исполнения:
QUERY— выполнить вложенный запрос (используется для DML-запросов)RETURN QUERY— выполнить вложенный запрос и отобразить результат выполнения (используется для DQL-запросов)
Пример использования¶
DO $$ BEGIN
RETURN QUERY SELECT item FROM warehouse WHERE id = 2;
UPDATE warehouse SET item = 'grills' where id = 2;
END $$;
Ограничения¶
Поддержка транзакционного выполнения команд в Picodata имеет ограничения:
- все запросы к шардированным таблицам внутри блока должны выполняться в рамках одного и того же бакета
- поддерживаются только запросы, не требующие перемещения данных
- для глобальных таблиц поддерживаются только читающие запросы (DQL), но не модифицирующие (DML)
- читающие команды в блоке должны располагаться строго до
модифицирующих: то есть, все
RETURN QUERY SELECT ...должны идти доUPDATEи дальше уже появиться не могут