尝试从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,但不明白我的宣言有什么问题......
答案 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'; ...
但我会避免使用保留字或内部函数名的变量名。