Não posso acreditar que a resposta aceita tenha tantos votos positivos - é um método horrível.
Aqui está a maneira correta de fazer isso, com date_trunc:
SELECT date_trunc('month', txn_date) AS txn_month, sum(amount) as monthly_sum
FROM yourtable
GROUP BY txn_month
É uma má prática, mas você pode ser perdoado se usar
GROUP BY 1
em uma consulta muito simples.
Você também pode usar
GROUP BY date_trunc('month', txn_date)
se você não quiser selecionar a data.