Trying to delete records older than 1 month from 2 tables, where 1 references the “id” column in another:
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;
but this fails with:
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
I’m reading the doc, but don’t understand what’s wrong with my declaration…
You need to declare the variable ‘month’, viz.:
Also, you might want to re-examine your “where” criteria. If QDATETIME is an indexed column, I don’t think it will use the index, whereas
QDATETIME < (now() - month)would.