【发布时间】:2018-11-19 12:49:41
【问题描述】:
我创建了一个用于获取数据的存储函数:
CREATE OR REPLACE FUNCTION sold_quantity()
RETURNS TABLE(
invoiceid BIGINT,
itemid BIGINT,
sum_sold_quantity NUMERIC)
AS $$
BEGIN
RETURN QUERY SELECT
invoice_id as invoiceid, item_id as itemid, sum(sold_quantity) as
sum_sold_quantity
FROM
invoice_item
WHERE
status='sold'
GROUP BY
invoice_id, item_id;
END; $$
LANGUAGE 'plpgsql';
如何存储这些数据并使用它来更新下表?
UPDATE invoice_item
SET sold_quantity = sum_sold_quantity
where invoice_id=invoiceid
and item_id = itemid;
我们如何将这两个查询(选择和更新)合并到一个存储函数中并执行以获取具有上述三列的所有 500k 记录并批量更新(如 10 000 条记录)
【问题讨论】:
-
不相关,但是:使用 PL/pgSQL 进行简单查询是多余的。使用
language sql函数会更高效 -
请不要这样做——不要写程序只是为了包装 SELECT 命令。它是显着的性能反模式 - 使用视图 instread。
标签: sql sql-update plpgsql postgresql-9.5 stored-functions