我想在 PostgreSQL 数据库中创建一个过程,该过程将从表中删除超过 3 个月的数据,并应在每天删除后提交,然后继续删除,直到达到 3 个月的间隔。 我写了sql,但程序有问题。
删除 来自测试滴 在哪里创建_日期<=current_date - interval '3 month';
提前致谢。
我创建了如下程序,但我不知道如何在每天删除后将提交包含在这里。
CREATE OR REPLACE PROCEDURE test_drop()
LANGUAGE plpgsql
AS
$$
DECLARE
c RECORD;
BEGIN
FOR c IN ( delete
from testdrop
where create_date<=current_date - interval '3 month';
)
END;
$$;
您必须创建要删除的日期列表,并在单个删除语句中执行每个日期。您可以使用generate_series() 创建日期列表。像这样的东西应该有效:
CREATE OR REPLACE PROCEDURE test_drop()
LANGUAGE plpgsql
AS
$$
DECLARE
_r RECORD;
BEGIN
FOR _r IN
SELECT CAST(d AS DATE) d
FROM GENERATE_SERIES(
(SELECT MIN(create_date) FROM testdrop) -- where to start
, CURRENT_TIMESTAMP - INTERVAL '3 months' -- where to end
, INTERVAL '1 day') gs(d)
LOOP
DELETE FROM testdrop WHERE create_date = _r.d; -- delete single day
RAISE NOTICE 'Date deleted: %', _r.d;
COMMIT; -- commit just this single day
END LOOP;
END ;
$$;