Аноннимные функции в PostgreSQL

Иногда при написании 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 выполняются в одной транзакции.

Добавить комментарий