触发函数内部的数组循环问题

时间:2019-05-24 19:56:13

标签: postgresql function loops triggers

我正在尝试将触发器放在桌子上。该表具有带有文本类型的正文列。此列中的文本可以包含@ {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;

1 个答案:

答案 0 :(得分:0)

好的,我解决了这个问题。这正是我想要的:

${list1.dayOfMonth}.${list1.monthValue}.${list1.year}.