PostgreSQL. Ошибка создания триггера

Рейтинг: 1Ответов: 0Опубликовано: 16.05.2023

Создаю триггер:

CREATE TRIGGER tr_fa_change
    AFTER INSERT
    ON lcs.fact_amount
    FOR EACH ROW
    EXECUTE PROCEDURE lcs.c_crosstab();

И выходит ошибка:

ERROR: function lcs.c_crosstab() does not exist 

Функция c_crosstab() в схеме lcs существует. Даже попробовал перенести её в public... ошибка осталась.

Подскажите в чем может быть ошибка?

ЗЫ: Функция c_crosstab()

CREATE OR REPLACE FUNCTION lcs.c_crosstab(eavsql_inarg character varying, resview character varying, rowid character varying, colid character varying, val character varying)
 RETURNS void
 LANGUAGE plpgsql
AS $function$
DECLARE
    casesql varchar;

dynsql varchar;

r record;

BEGIN   
 dynsql = '';

FOR r IN 
      SELECT
    *
FROM
    pg_views
WHERE
    lower(viewname) = lower(resview)
  LOOP
      EXECUTE 'DROP VIEW IF EXISTS ' || resview || ' CASCADE';
END LOOP;

casesql = 'SELECT DISTINCT ' || colid || ' AS v from (' || eavsql_inarg || ') eav ORDER BY ' || colid;

FOR r IN EXECUTE casesql LOOP
    dynsql = dynsql || ', ' || 'CASE WHEN ' || colid || '=''' || r.v || ''' THEN ' || val || ' ELSE NULL END AS ' || r.v;
END LOOP;

dynsql = 'CREATE VIEW ' || resview || ' AS SELECT ' || rowid || dynsql || ' from (' || eavsql_inarg || ') eav ORDER BY ' || rowid;

RAISE NOTICE 'dynsql %1',
dynsql;

EXECUTE dynsql;

EXECUTE 'CREATE VIEW v_crosstab_work AS (SELECT vct.*, sb.branch_name, vt.branch_id, vt.parent_id, vt.fdate, vt.branch_name FROM v_temp vt LEFT JOIN ' || resview || ' vct ON vt.id = vct.id ORDER BY vt.id)';


END;

$function$
;

Ответы

Ответов пока нет.