Re: Batch INSERT failing with error 22P02

Поиск
Список
Период
Сортировка
От Eric Faulhaber
Тема Re: Batch INSERT failing with error 22P02
Дата
Msg-id 46F2C982.2070209@goldencode.com
обсуждение исходный текст
Ответ на Re: Batch INSERT failing with error 22P02  (Eric Faulhaber <ecf@goldencode.com>)
Ответы Re: Batch INSERT failing with error 22P02  (Kris Jurka <books@ejurka.com>)
Список pgsql-jdbc
Eric Faulhaber wrote:
> Kris Jurka wrote:
>> 2) Where's the unspecified type coming from?  I've put in a hack to
>> the driver to throw an exception when the first unspecified type is
>> set which should hopefully provide enough information to track it
>> back to your application.  Unspecified types are perfectly legal, so
>> this isn't a real problem, but it may be informational.
>
> I turned on some additional logging in our code to see what data is
> being bound to each parameter in our UserType implementation.  It
> seems the unspecified type is coming from a Date object bound with
> PreparedStatement.setDate(int, java.sql.Date).  At least, this is the
> first parameter that triggers the test.

How relevant is the following change to this mystery?  This is an
excerpt from a diff of AbstractJdbc2Statement between the versions we've
been discussing, specifically, the internals of the setDate(int, Date,
Calendar) method:

---
postgresql-jdbc-8.1-408.src/org/postgresql/jdbc2/AbstractJdbc2Statement.java
2006-11-05 00:44:44.000000000 -0500
+++
postgresql-jdbc-8.2-506.src/org/postgresql/jdbc2/AbstractJdbc2Statement.java
2007-07-27 05:01:53.000000000 -0400

...

@@ -2897,7 +2919,7 @@
        if (cal != null)
            cal = (Calendar)cal.clone();

-        // We must use INVALID here, or inserting a Date-with-timezone
into a
+        // We must use UNSPECIFIED here, or inserting a
Date-with-timezone into a
        // timestamptz field does an unexpected rotation by the server's
TimeZone:
        //
        // We want to interpret 2005/01/01 with calendar +0100 as
@@ -2916,7 +2938,7 @@
        //  2005-01-01 00:00:00+03
        // (1 row)

-        bindString(i, connection.getTimestampUtils().toString(cal, d),
Oid.INVALID);
+        bindString(i, connection.getTimestampUtils().toString(cal, d),
Oid.UNSPECIFIED);
    }

    public void setTime(int i, Time t, java.util.Calendar cal) throws
SQLException
...

I mean, it obviously explains where the unspecified type is coming from,
but how likely is that to trigger the FE/BE type mismatch we're seeing
many records later?

Thanks,
Eric Faulhaber


В списке pgsql-jdbc по дате отправления:

Предыдущее
От: Eric Faulhaber
Дата:
Сообщение: Re: Batch INSERT failing with error 22P02
Следующее
От: Kris Jurka
Дата:
Сообщение: Re: Batch INSERT failing with error 22P02