【发布时间】:2017-09-28 04:18:51
【问题描述】:
我有几个表格展示了网站上的不同实体。它们之间的链接对我的任务无关紧要。 (这也不是我的设计)。 我想通过一些文本字段来完成翻译、拼写检查等艰苦的工作。有很多文本。
我的问题是:我可以通过所有这些表按顺序查询 FOR LOOP。下面示例中的 array_cat 是一个适当的决定,还是会吃掉我所有的公羊?还有另一种变体 - 制作第二个函数,接收表名作为参数。我很乐意选择一个更简单的决定。
下面的这个测试示例不适用于 array_cat 中的语法错误。运算符 ||也给了我语法错误。
DO
$$
DECLARE
qs TEXT;
BEGIN
FOR qs IN array_cat( -- as @ammoQ suggested to do UNION ALL
SELECT array_agg(messages) FROM posts UNION ALL
SELECT array_agg(comments) FROM boards )
LOOP
-- here I need: count chars really processed
-- to do not exceed the billing quota of external api
-- then make an UPSERT into cache table for another long process
-- if quota is not exceeded
END LOOP;
-- and return total of processed symbols
END;
$$ LANGUAGE plpgsql;
【问题讨论】:
-
我不明白您为什么要将文本聚合到数组中并在稍后将所有内容连接起来以对文本进行处理...为什么不在每个文本列上执行相同的大量工作分别在每一行中?..而不是在循环中,而是在
SELECT?.. -
我只是不知道正确的 sql 方式。在进行了一些优化之后,我只需要在循环内执行一个 UPSERT 即可。我编辑了这个例子。
-
请提供表格和数据示例以及文本进程示例。我觉得这里的plpgsql处理太贵了
标签: sql postgresql loops select plpgsql