PostgreSQL:月:=间隔'30天';

时间:2011-01-17 13:09:41

标签: postgresql plpgsql

尝试从2个表中删除超过1个月的记录,其中1表示另一个表中的“id”列:

create or replace function quincytrack_clean()
        returns void as $BODY$
        begin
                month := interval '30 days';

                delete from hide_id
                where id in
                (select id from quincytrack
                where age(QDATETIME) > month);

                delete from quincytrack
                where age(QDATETIME) > month;
        end;
$BODY$ language plpgsql;

但是失败了:

ERROR:  syntax error at or near "month"
LINE 1: month := interval '30 days'
        ^
QUERY:  month := interval '30 days'
CONTEXT:  SQL statement in PL/PgSQL function "quincytrack_clean" near line 2

我正在阅读the doc,但不明白我的宣言有什么问题......

2 个答案:

答案 0 :(得分:3)

您需要声明变量'month',即:

declare
    month interval;
begin
    month := interval '30 days';
end;

此外,您可能需要重新检查“where”标准。如果QDATETIME是一个索引列,我认为它不会使用索引,而QDATETIME < (now() - month)会。{/ p>

答案 1 :(得分:2)

您需要先声明变量才能使用它。

...
DECLARE
   month INTERVAL;
BEGIN 
   month := interval '30 days';
 ...

但我会避免使用保留字或内部函数名的变量名。