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

bxpogfeg  于 2024-01-07  发布在  PostgreSQL
关注(0)|答案(1)|浏览(144)

我想在PostgreSQL数据库中创建一个过程,该过程将从表中删除超过3个月的数据,并应在删除后的每一天提交,然后继续删除,直到达到3个月的间隔。我写了SQL,但有麻烦的过程。
从testdrop中删除,其中create_date<=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;
$$;

字符串

holgip5t

holgip5t1#

你必须创建一个你想要删除的日期列表,并在一个delete语句中执行每个日期。你可以使用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)
        ORDER BY d
        LOOP
            DELETE
            FROM testdrop
            WHERE create_date >= _r.d
              AND create_date < (_r.d + INTERVAL '1 day'); -- delete single day
            RAISE NOTICE 'Date deleted: %', _r.d;
            COMMIT; -- commit just this single day
        END LOOP;
END ;
$$;

字符串

相关问题