Postgres:使用数组更新列,其值取自查找表

问题描述 投票:0回答:1

我有一个列表:email1, email2, ... email5, domain_freqs和函数get_domain: get_domain([email protected]) = gmail.com

我有一个查找表,其中包含数据库中所有电子邮件中出现的所有电子邮件域的频率:

word         nentry
gmail.com    130879
hotmail.com  12981
...

我想更新domain_freqs列以存储从查找表中提取的值数组。

例如,如果我有一条记录:

email1 = [email protected] 
email2 = [email protected]

然后我想在domain_freqs列中存储ARRAY[130879, 12981, NULL, NULL, NULL]

arrays postgresql
1个回答
0
投票

弄清楚了。对于大约1米的联系人记录数据库,大约需要6分钟。如果有人知道更有效的方式这样做......

update emails e
set domain_freqs = (    
    select array_agg(nentry) as dom_freqs from (
        select * from (
            select *, unnest(ARRAY[
              get_domain(email1),
              get_domain(email2),
              get_domain(email3),
              get_domain(email4),
              get_domain(email5)
            ]) as dom from emails e
        ) sub, LATERAL (
          select nentry from lookup_table lt 
            where word = dom
        ) lat
    ) agg group by id having e.id = agg.id
); 
© www.soinside.com 2019 - 2024. All rights reserved.