No puedo creer que la respuesta aceptada tenga tantos votos a favor, es un método horrible.
Esta es la forma correcta de hacerlo, con date_trunc:
SELECT date_trunc('month', txn_date) AS txn_month, sum(amount) as monthly_sum
FROM yourtable
GROUP BY txn_month
Es una mala práctica, pero puede ser perdonado si usa
GROUP BY 1
en una consulta muy sencilla.
También puedes usar
GROUP BY date_trunc('month', txn_date)
si no desea seleccionar la fecha.