Re: Odd behavior with 'currval'

From: Francisco Olarte <folarte(at)peoplecall(dot)com>
To: Steven Hirsch <snhirsch(at)gmail(dot)com>
Cc: pgsql-general(at)lists(dot)postgresql(dot)org
Subject: Re: Odd behavior with 'currval'
Date: 2018-02-09 15:47:10
Message-ID: CA+bJJbwDacAxT8LsPhFfFjpO6DaR7H-XFpyJ8nukSfOXsTdkwQ@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Steven:

On Thu, Feb 8, 2018 at 10:52 PM, Steven Hirsch <snhirsch(at)gmail(dot)com> wrote:

This may sound a bit harsh but:

> The culprit is in the JDBC domain, NOT PostgreSQL! According to the
> documentation I found, the ResultSet 'getLong()' method returns a value of
> zero when it sees NULL as an input. Why the JDBC libs don't treat this as an
> invalid numeric conversion is beyond me.

No, that's not a JDBC problem, that's pilot error.

JDBC has behaved like these for ever, and you have had people chasing
ghosts ( not a biggie, we are used to this ) because, instead of
providing the real chunks you were running you kept saying "when I
select currval() I get 0" and similar things. If you had said "when I
do rs.getLong(col) I get 0", or pasted a relevant chunk of code, lots
of people here would have pointed that getLong returns a primitive
java long, so rs.getObject() is needed if you may get null. JDBC has
been doing this forever, and they probably do it because in many cases
this behaviour is useful.

This also raises suspicions about your sequence ownership problems, as
you may have being ( with your best intention ) pasting your code to
reproduce the problems instead of the real scripts from the database.

In general, when you run a code chunk for problem reporting, try to do
it with psql ( which everybody has and knows how it works ) and paste
the code / result directly, without much editing. This aids a lot. In
fact, if you do it you may have noticed your text in psql returned an
empty column in currval(null), which, knowgin it is int, means it was
null ( in a string you cannot easily distinguish empty from nulls in a
simple select ).

Anyway, you report was quite nice and showed you put quite a bit of
work in it, treat these as tips to make problem reporting / solving
easier, not just as criticism.

Francisco Olarte.

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Geoff Winkless 2018-02-09 16:31:45 testing for DEFAULT insert value in ON CONFLICT DO UPDATE query
Previous Message David G. Johnston 2018-02-09 15:45:16 Re: Odd behavior with 'currval'