DO

DO — выполнить анонимный блок кода

Синтаксис

DO [ LANGUAGE имя_языка ] код

Описание

Команда DO выполняет анонимный блок кода или, другими словами, временную анонимную функцию на процедурном языке.

Блок кода обрабатывается так, как если бы это было тело функции без параметров, возвращающее значение void. Этот код анализируется и выполняется один раз.

Необязательное предложение LANGUAGE может быть написано как до, так и после блока кода.

Параметры

код

Выполняемый код на процедурном языке. Он должен задаваться в виде текстовой строки (ее рекомендуется заключать в знаки доллара), как и код в CREATE FUNCTION.

имя_языка

Название процедурного языка, на котором написан код. Если этот параметр опущен, значение по умолчанию равно plpgsql.

Примечания

Используемый процедурный язык должен быть уже установлен в текущую базу данных с помощью команды CREATE EXTENSION. plpgsql устанавливается по умолчанию, но другие языки — нет.

Необходимо иметь право USAGE для данного процедурного языка либо быть суперпользователем, если язык недоверенный. Такие же права требуются и при создании функции на этом языке.

Если команда DO выполняется в блоке транзакций, то код процедуры не может вызывать операторы управления транзакциями. Такие операторы допускаются только в том случае, если DO выполняется в собственной транзакции.

Примеры

Предоставление роли webuser всех прав доступа на все представления в схеме public:

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.

См. также

CREATE LANGUAGE