Hi,

A while back the Posgre Java driver had a breaking change for procedure calls: https://github.com/pgjdbc/pgjdbc/issues/1413

this is still unfortunately not addressed in: spring-jdbc:5.2.10.RELEASE

CallMetaDataContext.java:649

didnt find a ticket for this,

BR

Comment From: jhoeller

So we'd have to use plain call ... syntax rather than {call ... }? Is there any indication for this from the JDBC driver? Otherwise all we could do is to add an explicit flag on AbstractJdbcCall that indicates which syntax to use... In the latter case, I wonder what the name of the flag should be. We're usually not baking database-specific stuff into those generic classes, so we might have to use an abstract name (rather than something like "postgres11StoredProcedureSyntax").

Comment From: riba2101

yeah, would def agree...

it actually looks like Posgre specific impl.

hmm, ive also noticed some oracle specific code, maybe to unify an approach?

Comment From: jhoeller

Even if were to add a Postgres-specific check there, how would we derive the need to use the plain call ... syntax? Would it really have to be a dedicated flag that you would have to set on the user side? I mean we're going to find some name for that flag then, I just wonder whether this is totally Postgres-specific or whether Postgres is following some broader industry convention there.

Comment From: jhoeller

On a related note, we recently addressed another breaking change in the Postgres JDBC implementation regarding stored procedures vs functions: #25399

Comment From: riba2101

yeah, saw that one, and I presume its the same (part of) breaking change(s) from Postgres :/ I mean to be really clean, we would need to create templates for specific dialects - but would deem the effort as overkill!

anywho the driver converstaion can be found here , probably worth checking if there is something else

Comment From: jhoeller

Even worse than database-specific dialects, we got version-specific differences since only PostgreSQL 11 is affected, and even there only specific kinds of stored procedures? I guess a dedicated flag a la plainCallSyntax, documented to match that new PostgreSQL 11 call syntax rather than JDBC's abstracted syntax, is the most flexible since it can be customized per operation on the user side.

Comment From: jhoeller

According to https://jdbc.postgresql.org/documentation/head/callproc.html and https://jdbc.postgresql.org/documentation/head/connect.html, there is JDBC driver property escapeSyntaxCallMode=callIfNoReturn that can be set if Postgres 11 style procedures are in use, translating the JDBC call escape syntax into call instead of select. As far as I understand, this has been introduced in November 2019, half a year after the discussion in the Postgres bug tracker. From that perspective, there seems to be no need to make a Postgres-specific mode in Spring's support. I hope this works for you as well.

Comment From: riba2101

so for all who are interested in this - checked it and it works. @jhoeller tnx, somehow missed the flag