PostgreSQL: месяц: = интервал «30 дней»; - PullRequest
2 голосов
/ 17 января 2011

Попытка удалить записи старше 1 месяца из 2 таблиц, где 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

Я читаю документ , но не понимаю, что не так с моим заявлением ...

Ответы [ 2 ]

3 голосов
/ 17 января 2011

Вам необходимо объявить переменную 'month', а именно ::10000

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

Кроме того, вы можете пересмотреть критерии «где». Если QDATETIME является индексированным столбцом, я не думаю, что он будет использовать индекс, тогда как QDATETIME < (now() - month) будет.

2 голосов
/ 17 января 2011

Вам необходимо объявить переменную, прежде чем вы сможете ее использовать.

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

Но я бы не стал использовать имена переменных, которые являются зарезервированными словами или именами внутренних функций.

...