как создать триггерные функции в PostgresSQL для нескольких схем и таблиц - PullRequest
0 голосов
/ 13 декабря 2018

Как создать триггерные функции в PostgresSQL для нескольких схем и таблиц.

Мне нужна одна функция для нескольких таблиц и схем.

Я пытаюсь использовать приведенный ниже код.

Функция:

CREATE OR REPLACE FUNCTION public.update_modifiedUser(pSchemaName text, pTableName text)
                RETURNS  trigger AS
$BODY$
DECLARE
vUserid   numeric;
BEGIN
                select t.userid into vUserid from public.user_login_details t where inet (t.systemid) = inet_client_addr() order by t.id desc limit 1;
                UPDATE pSchemaName||.||pTableName SET modified_user = vUserid ,modified_date = now() WHERE ID = NEW.ID;
                RETURN NEW;
END;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;

Триггер:

CREATE TRIGGER trg_modUser_aerial
  BEFORE UPDATE OF geom
  ON sandiego.aerial
  FOR EACH ROW
  EXECUTE PROCEDURE public.update_modifiedUser('sandiego','aerial');

при выполнении функции Я получаю эту ошибку:

ОШИБКА: триггерфункции не могут иметь объявленные аргументы

СОВЕТ: Вместо аргументов триггера можно получить доступ через TG_NARGS и TG_ARGV.

CONTEXT: компиляция функции PL / pgSQL "update_modifieduser" рядом со строкой 1

сообщите мне о любых изменениях в моей функции

1 Ответ

0 голосов
/ 13 декабря 2018

Я бы на вашем месте был SET search_path соответственно в теле функции, тогда вам не нужно квалифицировать схему объектов внутри вашей функции и работать без особого динамического SQL.

Вы можете получить схемутаблицы из переменной TG_TABLE_SCHEMA, или вы можете передать ее в качестве аргумента функции триггера в CREATE TRIGGER и прочитать ее из TG_ARGV[].

См. документацию .

...