Не следует преобразовывать временную метку в varchar, если вы планируете сохранить ее в переменной timestamp
(а затем сравнить ее со столбцом временной метки).
Чтобы сгенерировать интервал дней на основе параметра, вы можете использовать функцию make_interval()
:
date := current_timestamp - make_interval(days => num_days);
Но вы слишком усложняете вещи. Вам не нужны переменные или динамические c SQL:
CREATE OR REPLACE FUNCTION delete_records(num_days int)
RETURNS void AS
DELETE FROM A_Table
WHERE A_DATE < current_timestamp - make_interval(days => num_days);
$BODY$
LANGUAGE sql;
Если вы упростили свой пример и вам действительно очень нужны динамические c SQL, не объединяйте значения в строку:
CREATE OR REPLACE FUNCTION delete_records(num_days int)
RETURNS void AS
$BODY$
DECLARE
sqlsatement text;
BEGIN
sqlsatement := 'DELETE FROM A_Table WHERE A_DATE < $1'
EXECUTE sqlsatement
using current_timestamp - make_interval(days => num_days);
END;
$BODY$
LANGUAGE plpgsql;
(я нахожу переменную с именем date
с типом timestamp
очень запутанная)