【发布时间】:2021-12-05 03:01:40
【问题描述】:
我有一项工作每天晚上运行,将更改加载到临时表中并将这些更改应用到主表。
CREATE TEMP TABLE IF NOT EXIST tmp AS SELECT * FROM mytable LIMIT 0;
COPY tmp FROM PROGRAM '';
11 SQL queries to update 'mytable' based on data from 'tmp'
我有大量查询要从 tmp 中删除重复项、更新 tmp 中的值、更新主表中的值以及将新行插入主表中。是否可以使用 plpgsql 循环遍历两个表?
UPDATE mytable m
SET "Field" = t."Field" +1
FROM tmp t
WHERE (t."ID" = m."ID");
在这个例子中,它是一个列值的简单改变。相反,我想对主表和临时表进行更复杂的操作。
编辑:所以这里有一些我想象的伪代码。
LOOP tmp t, mytable m
BEGIN
-- operation in plpgsql including UPDATE, INSERT, DELETE
END
WHERE t.ID = m.ID;
【问题讨论】:
-
是的,只需将您现在正在运行的查询按正确的顺序放入函数中即可。
-
在切换到plpgsql语言之前先尝试创建sql user-defined function或sql user-defined procedure
-
我已经将查询放入了一个过程中并且它确实有效,但它似乎对我来说效率低下,因为我必须执行很多查询并且我需要执行更复杂的操作我需要添加更多查询。所以我在想的是我是否可以有一个嵌套的循环。
-
你当然可以在 psql 和循环中得到你想要的东西。但是您说“但对我来说似乎效率低下...”,您可能要记住,涉及 SQL 的循环通常是效率最低的方法有。
-
感谢您的反馈。编程背景和没有 SQL 经验往往会使您根据程序定义解决方案。我能够减少查询的数量以使其更可口。在 UPDATE 查询中使用函数计算值有多糟糕?
标签: postgresql plpgsql