вы становитесь жертвой, которую date
неявно бросаете, чтобы +01
включить вызов функции.
date_trunc определяется только для +02
и timestamp
входов.
+01
+02
и т. д. зависит от правил летнего времени вашего региона.
если вы хотите, чтобы timestamp вместо timestamptz сначала указывал дату на метку времени.
SELECT date_trunc('month', cast(my_date as timestamp)) FROM my_table
или вы можете создать свою собственную функцию, которая принимает дату и возвращает дату.
create or replace function date_trunc(text,date) returns date language sql as
'select date_trunc($1, $2::timestamp)::date';