Re: Invoking a function within a batch statement

From: Evan Meagher <evan(dot)meagher(at)gmail(dot)com>
To: Vladimir Sitnikov <sitnikov(dot)vladimir(at)gmail(dot)com>
Cc: pgsql-jdbc(at)postgresql(dot)org, Steven Schlansker <stevenschlansker(at)gmail(dot)com>
Subject: Re: Invoking a function within a batch statement
Date: 2016-08-23 03:37:38
Message-ID: CABJcc3R0UFxr3O6rbT0UFTEnMPKeaAWr6rTmhefYHP0qcgSQpg@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-jdbc

> Let us know how the call syntax works out for you

Using `{append_to_time_series(...)}` results in a o.p.u.PSQLException with
message 'ERROR: syntax error at or near "{"'

> Can you please try the latest pgjdbc 9.4.1210-SNAPSHOT +
@GetGeneratedKeys near your @SqlBatch("select ...") kind of statement?

That works! In fact, on 9.4.1210-SNAPSHOT, it works with and without the
@GetGeneratedKeys annotation.

I guess I'll just stay tuned for a stable 9.4.1210 release and make do with
the snapshots in the meantime. Thanks to all for the responses, and thanks
Vladimir for the workaround!

On Fri, Aug 19, 2016 at 8:00 AM, Vladimir Sitnikov <
sitnikov(dot)vladimir(at)gmail(dot)com> wrote:

> Evan>However, because Postgres functions are invoked using SELECT, they
> return a table-like result, so even though my PL/pgSQL function returns
> VOID, the queries fail in the JDBC driver because it's expecting a null
> result.
>
> Evan,
>
> Can you please try the latest pgjdbc 9.4.1210-SNAPSHOT + @GetGeneratedKeys
> near your @SqlBatch("select ...") kind of statement?
>
> The idea is as follows:
> 1) jDBI would issue prepareStatement(..., Statement.RETURN_GENERATED_
> KEYS);
> 2) pgjdbc has recently learned to handle "return generated keys" better,
> so that "return_generated_keys" would hint pgjdbc that it should expect
> some response (including empty rowset), so it won't fail with "none was
> expected".
>
> Technically speaking, the question "if pgjdbc should fail when unexpected
> row data comes in a response to a query" was raised (see
> https://github.com/pgjdbc/pgjdbc/issues/488#issuecomment-237908650 ),
> however historical behavior was just fail with "A result was returned when
> none was expected"
>
> The solution is to use proper API when executing statements that return
> something. For instance: executeQuery, or use "generated keys" API.
>
> Vladimir
>
>>

--
Evan Meagher

In response to

Responses

Browse pgsql-jdbc by date

  From Date Subject
Next Message Dave Cramer 2016-08-23 11:15:07 Re: Invoking a function within a batch statement
Previous Message rapidtransit440 2016-08-21 23:45:19 Anyone Getting deadlocks using 9.5