Steven: On Thu, Feb 8, 2018 at 10:52 PM, Steven Hirsch <snhirsch@xxxxxxxxx> 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.