Задать вопрос
@kondratev-ad

Как в PostgeSQL вызвать функцию из другой схемы?

Всем привет. Подскажите, как можно в триггер функции SQL вызвать функцию из другой схемы?
Имеем PosgreSQL, основная схема public и схема amqp, которая образовалась когда подключил pg_amqp.
В схеме public есть триггер функция по отслеживанию INSERT/UPDATE/DELETE в таблице:
Код функции
BEGIN
   if (TG_OP = 'INSERT') then
       INSERT INTO table_1_audit_log (
           table_1_id,
           old_row_data,
           new_row_data,
           dml_type,
           dml_timestamp
       )
       VALUES(
           NEW.id,
           null,
           to_jsonb(NEW),
           'INSERT',
           CURRENT_TIMESTAMP
       );
      
          
       RETURN NEW;
       
   elsif (TG_OP = 'UPDATE') then
       INSERT INTO table_1_audit_log (
           table_1_id,
           old_row_data,
           new_row_data,
           dml_type,
           dml_timestamp
       )
       VALUES(
           NEW.id,
           to_jsonb(OLD),
           to_jsonb(NEW),
           'UPDATE',
           CURRENT_TIMESTAMP
       );
            
       RETURN NEW;
   elsif (TG_OP = 'DELETE') then
       INSERT INTO table_1_audit_log (
           table_1_id,
           old_row_data,
           new_row_data,
           dml_type,
           dml_timestamp
       )
       VALUES(
           OLD.id,
           to_jsonb(OLD),
           null,
           'DELETE',
           CURRENT_TIMESTAMP
       );
       
       RETURN OLD;
   end if;
    
END;

Хочу в этой функции вызвать функцию amqp.publish из схемы amqp:
SELECT amqp.publish(1, '', 'queu', 'messange')

Но мне выдает ошибку:
ERROR: function amqp.publish(integer, unknown, unknown, unknown) does not exist
  • Вопрос задан
  • 268 просмотров
Подписаться 1 Простой 5 комментариев
Решения вопроса 1
@kondratev-ad Автор вопроса
Помогло решение Melkij задать типы принудительно
SELECT amqp.publish(1, ''::varchar, 'queu'::varchar, 'messange'::varchar)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы