date(-1)
недействительно. Это должно быть просто date
.
$1
также не допускается в качестве имени параметра в определении функции.
Вы либо вообще не предоставляете имя (например, test(date)
- не рекомендуется), либо вы предоставляете имя, которое является допустимым идентификатором SQL (рекомендуется).
Также нет необходимости использовать $1
при обращении к параметру.
CREATE OR REPLACE FUNCTION my_schema.test(p_input date)
RETURNS date
LANGUAGE SQL
IMMUTABLE
AS $$
SELECT (date_trunc('MONTH', p_input) + INTERVAL '1 MONTH - 1 day')::date;
$$
;