Иногда при написании SQL-выражения необходимо использовать некоторые конструкции plpgsql. При этом совсем не обязательно компилировать и сохранять функцию в БД.
PostgreSQL позволяет использовать в скриптах анонимные функции.
Ниже показан обобщенный синтаксис анонимной функции.
DO $$ {Описание переменных} BEGIN {Тело функции} END $$;
Анонимные функции не принимают параметров, но необходимые значения можно присвоить объявленным в заголовке переменным.
Ниже приведен пример анонимной функции выполняющей TRUNCATE всех таблиц указанной схемы.
DO $$ DECLARE rec RECORD; BEGIN FOR rec IN ( SELECT 'TRUNCATE TABLE ' || quote_ident(schemaname) || '.' || quote_ident(tablename) || ' CASCADE;' AS expression FROM pg_tables WHERE schemaname = 'your_schema_name' ) LOOP EXECUTE rec.expression; END LOOP; END $$;
Не стоит забывать, что анонимные функции, как и все функции PostgreSQL выполняются в одной транзакции.