Я пытаюсь поставить триггер на столе. Эта таблица имеет столбец тела с типом текста. Текст в этом столбце может содержать упоминания @ {username}, и мне нужно извлечь их и записать в базу данных, а также уведомить мою заявку.
Приведенный ниже код работает, но я не думаю, что в идеале в блоке foreach я делаю дополнительный выбор, чтобы получить user_id, связанный с именем пользователя. Но проблема в том, что я не могу понять, как использовать json как массив. Я перепробовал много вещей, но я только что получил ошибку за ошибкой, и, откровенно говоря, у меня сейчас болит голова!
Мне также кажется странным, что мне нужно иметь массив usernames для того, чтобы извлечь имена пользователей, а затем поместить id, username, firebase_id в другой массив, но я не смог выбрать как результат parse_tokens, так и id, firebase_id из таблица пользователей в один массив.
Есть идеи?
Любые другие предложения приветствуются.
Спасибо
create or replace function notif() returns trigger as $$
declare
usernames text[];
mentions json;
mu text;
begin
select parse_tokens(new.body, '@') into usernames;
select json_agg(tmp)
from (
select id, username, firebase_id
into mentions
from users
where username=any(usernames)
) tmp;
perform pg_notify('status', mentions::text);
foreach mu in array usernames loop
insert into mentions (status_id, from_user_id, to_user_id) values
(new.id, new.user_id, (select id from users where username=mu));
end loop;
return new;
end; $$ language plpgsql;