DO
Эта страница переведена при помощи нейросети GigaChat.
DO - выполнение анонимного блока кода.
Синтаксис
DO [ LANGUAGE lang_name ] code
Описание
DO выполняет анонимный блок кода, другими словами — временную анонимную функцию, написанную на процедурном языке.
Этот блок кода обрабатывается так, как если бы он был телом функции без параметров, возвращающей void. Блок анализируется и выполняется один раз.
Опциональня часть LANGUAGE может быть указана как до, так и после блока кода.
Параметры
code- Код на процедурном языке, который необходимо выполнить.
Он должен быть указан в виде строкового литерала, как и при использовании
CREATE FUNCTION. Рекомендуется использовать литералы с долларовым экранированием (например,$$ ... $$).
lang_name- Название процедурного языка, на котором написан код.
Если не указано, по умолчанию используется
plpgsql.
Примечания
Процедурный язык, который необходимо использовать, должен быть установлен в текущую базу данных с помощью CREATE EXTENSION.
Язык plpgsql устанавливается по умолчанию, но другие языки — нет.
Пользователь должен иметь привилегию USAGE на указанный процедурный язык, либо быть суперпользователем, если язык является небезопасный. Это те же требования, что и при создании функции на этом языке.
Если команда DO выполняется внутри блока транзакции,
то код внутри нее не может содержать операторов управления транзакциями (BEGIN, COMMIT, ROLLBACK и другие). Такие операторы разрешены только если DO выполняется в отдельной транзакции.
Примеры
Следующий код даст все права для всех представлений в схеме public роли webuser:
DO $$DECLARE r record;
BEGIN
FOR r IN SELECT table_schema, table_name FROM information_schema.tables
WHERE table_type = 'VIEW' AND table_schema = 'public'
LOOP
EXECUTE 'GRANT ALL ON ' || quote_ident(r.table_schema) || '.' || quote_ident(r.table_name) || ' TO webuser';
END LOOP;
END$$;
Совместимость
В стандарте SQL нет команды DO.