Thread: WARNING on setAutoCommit
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@lifeflow.jp ┛ : (Office) daichi@neu.co.jp ┛ : (Univ) g23010@cr.info.hiroshima-cu.ac.jp ┛ ┛
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@lifeflow.jp > ┛ : (Office) daichi@neu.co.jp > ┛ : (Univ) g23010@cr.info.hiroshima-cu.ac.jp > ┛ > ┛ > > > ---------------------------(end of broadcast)--------------------------- > TIP 6: Have you searched our list archives? > > http://archives.postgresql.org >
I am working on a fix for this bug right now. --------------------------------------------------------------------------- Barry Lind wrote: > 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@lifeflow.jp > > ? : (Office) daichi@neu.co.jp > > ? : (Univ) g23010@cr.info.hiroshima-cu.ac.jp > > ? > > ? > > > > > > ---------------------------(end of broadcast)--------------------------- > > TIP 6: Have you searched our list archives? > > > > http://archives.postgresql.org > > > > > > > ---------------------------(end of broadcast)--------------------------- > TIP 2: you can get off all lists at once with the unregister command > (send "unregister YourEmailAddressHere" to majordomo@postgresql.org) > -- Bruce Momjian | http://candle.pha.pa.us pgman@candle.pha.pa.us | (610) 359-1001 + If your life is a hard drive, | 13 Roberts Road + Christ can be your backup. | Newtown Square, Pennsylvania 19073