PL / R - это расширение процедурного языка в PostgreSQL (аналогично plpython, plperl, plphp), где можно запустить корректный, совместимый код языка R.Вы пытаетесь выполнить SQL, который сам по себе не может быть запущен в сеансе R, поэтому ваш код не будет работать в хранимой функции PG plr
.
Однако такое расширение не требуется, поскольку ваши потребности могут быть обработаныс базовым языком SQL
(часто более эффективным) для возврата необходимой таблицы диапазонов дат по указанному диапазону ввода:
CREATE OR REPLACE FUNCTION seq_monthly(min_date_str char, max_date_str char)
RETURNS TABLE(snapshot_date date) AS
$$
with mydate as (
select d as first_day,
DATE_TRUNC('month', d)
+ '1 MONTH'::INTERVAL
- '1 DAY'::INTERVAL as last_day
from generate_series(min_date_str::date,
max_date_str::date,
'1 month') as d
)
select last_day::date as snapshot_date from mydate;
$$
LANGUAGE SQL STABLE;
select * from seq_monthly('2010-01-31' , '2018-12-31');
Rextester demo
Теперь, если вы действительно хотите сохранить plr
функцию, используйте R seq()
в заданном диапазоне дат:
CREATE FUNCTION standard.seq_monthly(min_date_str char, max_date_str char)
RETURNS setof dates AS
$$
seq(as.Date(min_date_str), as.Date(max_date_str), by='month')
$$
LANGUAGE 'plr';
select * from standard.seq_monthly('2010-01-01' , '2018-12-01')