[ 
https://issues.apache.org/jira/browse/CAMEL-13951?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16924368#comment-16924368
 ] 

Claus Ibsen commented on CAMEL-13951:
-------------------------------------

We could also have a PostgresAggregationRepository that extends the default 
class and then setup for postgres with that nested transaction behavior, as it 
makes it clear its for postgres database.

Otherwise then the setter  setPostgreSQLSpecialBehavio is maybe the best as 
then more end users will spot it, as if the name is to generic they wont know 
that it benefit them if they use postgres

> JdbcAggregationRepository doesn't work with PostgreSQL
> ------------------------------------------------------
>
>                 Key: CAMEL-13951
>                 URL: https://issues.apache.org/jira/browse/CAMEL-13951
>             Project: Camel
>          Issue Type: Improvement
>          Components: camel-sql
>    Affects Versions: 2.24.1, 3.0.0.RC1
>            Reporter: Grzegorz Grzybek
>            Assignee: Grzegorz Grzybek
>            Priority: Major
>
> See:
> * 
> https://www.postgresql.org/message-id/200609241203.59292.ralf.wiebicke%40exedio.com
> * 
> https://groups.google.com/forum/#!msg/comp.databases.postgresql/NuXGXdFbA4g/LQ97ahowmxkJ
> * 
> https://www.progress.com/blogs/solution-to-current-transaction-is-aborted-error-for-postgresql-compatibility-with-odbc-jdbc
> 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:
> bq. 23505: unique_violation
> 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:
> {noformat}
> Caused by: org.postgresql.util.PSQLException: ERROR: current transaction is 
> aborted, commands ignored until end of transaction block
>       at 
> org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2468)
>       at 
> org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2211)
>       at 
> org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:309)
>       at org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:446)
> ...
> {noformat}
> 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.



--
This message was sent by Atlassian Jira
(v8.3.2#803003)

Reply via email to