用于删除旧行和 return 已删除行的 Postgres 函数

Postgres function to delete old rows and return deleted rows

我想编写一个函数来删除 table 优惠中的旧行,然后 return 删除的行。

CREATE OR REPLACE FUNCTION delOldOffers() RETURNS void AS $$
DELETE FROM "public"."Offers"
 WHERE created_at < now() - interval '7 days'

$$ LANGUAGE sql STABLE;

我写了上面的函数,但我不确定如何 return 删除的行?如果有人能提供帮助那就太好了!

您需要将函数声明为 return a table(或 setof)并使用 returning 子句:

CREATE OR REPLACE FUNCTION deloldoffers(p_num_days integer) 
  RETURNS setof offers 
AS $$
  DELETE FROM Offers
  WHERE created_at < current_timestamp - make_interval(days => p_num_days)
  returning *;
$$ LANGUAGE sql;

要使用它,您需要select“来自”它:

select *
from deloldoffers(10);