From: | Barry Lind <blind(at)xythos(dot)com> |
---|---|
To: | Daichi Ueura <daichi(at)lifeflow(dot)jp> |
Cc: | pgsql-jdbc(at)postgresql(dot)org |
Subject: | Re: WARNING on setAutoCommit |
Date: | 2003-03-19 01:18:33 |
Message-ID: | 3E77C569.5050203@xythos.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-jdbc |
Daichi,
What you are reporting is a bug in the server. The "select 1" should
start a new transaction and doesn't and that has already been reported
as a bug on the pgsql-hackers mail list.
Your suggested work around of the server bug is a good suggestion. I
will implement this workaround in the driver.
thanks,
--Barry
Daichi Ueura wrote:
> Hi,
>
> The following warning is shown on postgres log when you use
> JDBC driver; Build 108, for PostgreSQL 7.3.x.
>
> This is the server condition I use:
> ----------------------------------------
> PostgreSQL 7.3.2
> JDBC pg73jdbc3.jar(Build 108)
> J2SE 1.4.1_01
> RedHatLinux 7.2
> ----------------------------------------
>
> When "auto commit" is set true, and I run Connection.setAutoCommit(false)
> command in JDBC program, the following warning is shown on the PostgreSQL log;
>
> WARNING: COMMIT: no transaction in progress
>
> Because of the warning, I looked at
> org.postgresql.jdbc1.AbstractJdbc1Connection#setAutoCommit(), and this program
> was written as follows;
>
> if (this.autoCommit == autoCommit)
> return;
> if (autoCommit)
> {
> if (haveMinimumServerVersion("7.3"))
> {
> //We do the select to ensure a transaction is in process
> //before we do the commit to avoid warning messages
> //from issuing a commit without a transaction in process
> execSQL("select 1; commit; set autocommit = on;");
> }
> else
> {
> execSQL("end");
> }
> }
>
> At the command line; execSQL("select 1; commit; set autocommit = on;");,
> the program must finish and not record "warning" in the log even though
> the program processes either during or at the end of the transaction.
> As a matter of fact, the warning appears when the program runs "commit;."
> The program doesn't begin a new transaction even though "select 1;"
> has been executed,
>
> I think if we change the command as follows,
>
> execSQL("select 1;");
> execSQL("commit; set autocommit = on;");
>
> we can finish the transaction without the warning.
>
> ┛
> ┛ Daichi Ueura
> ┛
> ┛ Hiroshima City Univ, Department of Intelligent Systems.
> ┛ e-mail: (Private) daichi(at)lifeflow(dot)jp
> ┛ : (Office) daichi(at)neu(dot)co(dot)jp
> ┛ : (Univ) g23010(at)cr(dot)info(dot)hiroshima-cu(dot)ac(dot)jp
> ┛
> ┛
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 6: Have you searched our list archives?
>
> http://archives.postgresql.org
>
From | Date | Subject | |
---|---|---|---|
Next Message | Barry Lind | 2003-03-19 01:45:10 | Re: Temporary memory peak |
Previous Message | Tanu Shankar Bhatnagar | 2003-03-18 22:44:10 | datasource issue |