我正在尝试将触发器放在桌子上。该表具有带有文本类型的正文列。此列中的文本可以包含@ {username}提及,我需要将其提取出来并将其写入数据库,并通知我的应用程序。
下面的代码有效,但是我认为在foreach块中进行额外的选择来获取与用户名关联的user_id并不理想。但是问题是,我不知道如何遍历提到的json作为数组。我已经尝试了很多事情,但我只是一次又一次地犯错,坦率地说,我现在很头疼!
对我来说似乎也很奇怪,我只需要具有用户名数组才能提取用户名,然后将id,username,firebase_id放入另一个数组中,但是我无法同时选择parse_tokens的结果和id,firebase_id的结果users表放在一个数组中。
有什么想法吗? 欢迎其他任何建议。 谢谢
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;
答案 0 :(得分:0)
好的,我解决了这个问题。这正是我想要的:
${list1.dayOfMonth}.${list1.monthValue}.${list1.year}.