如何在 PostgreSQL 中创建将从表中删除行的过程

问题描述 投票:0回答:1

我想在 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;
$$;
postgresql procedure
1个回答
0
投票

您必须创建要删除的日期列表,并在单个删除语句中执行每个日期。您可以使用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 ;
$$;
© www.soinside.com 2019 - 2024. All rights reserved.