Here's a patch fixing a bug in throwing a PSQLException which causes
helpful information to not be displayed. The code is clearly trying to
call the PSQLException(String, PSQLState, Object[]) constructor, but
instead gets the PSQLException(String, Object) constructor because it
forgets the PSQLState.
This first bug may have been causing the second; I can't remember
anymore. Anyway, sometimes this.state in PSQLException is null causing
getSQLState() to throw a NullPointerException. I've included a check for
this and return the string "null" when the state is null.
Finally, I've changed PSQLState to implement Serializable so that I can
throw SQLExceptions to remote callers.