我有几个表格展示了网站上的不同实体。它们之间的联系对我的任务无关紧要。 (这也不是我的设计)。 我想通过一些文本字段来完成翻译、拼写检查等艰苦的工作。文本很多。
我的问题是:我可以按顺序查询所有这些表的 FOR 循环吗?下面的示例中的 array_cat 是否是一个适当的决定,或者它会吃掉我所有的 ram?还有另一种变体 - 创建第二个函数,接收表名作为参数。我很乐意选择一个更简单的决定。
下面的测试示例不适用于 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;
最佳答案
使用union
编辑:删除 array_agg
DO
$$
DECLARE
qs TEXT;
BEGIN
FOR qs IN (
SELECT messages x FROM posts union all
SELECT comments FROM boards )
LOOP
RAISE DEBUG 'TEXT is %', qs.x;
END LOOP;
END;
$$ LANGUAGE plpgsql;
关于sql - 通过来自不同未链接表的不同字段的连续循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43707436/