вы становитесь жертвой, которую 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';

