The problem is that JdbcAggregationRepository relies heavily on spring-jdbc's throwing org.springframework.dao.DataIntegrityViolationException according to its sql exception mapping.
By default, DataIntegrityViolationException is thrown if SQLState starts with 23. Check https://www.postgresql.org/docs/10/errcodes-appendix.html and see that:
The problem specific to PostgreSQL is that hitting such exception makes the connection (and surrounding Spring transaction) unusable. There's no way to repeat an attempt to insert (or even check current) state of aggregation, because PostgreSQL will immediately throw:
With SQLState - 25P02 == "in_failed_sql_transaction".
The expected (by PostgreSQL) behavior is to rollback current transaction and start over.
We're however in (potentially nested) TransactionTemplate and rollback only status is beyond (easy) control.