Обсуждение: SET TRANSACTION ISOLATION LEVEL
Hi
I got this error, it isn't the first transaction since the server was
started, so I don't understant what it means. The docs seem to suggest
that the READ COMMITTED level is default. If there is a default, why do I
need to set it?
I am AFAIK running single threaded in my java code, so I don't think I
would be dong two separate transactions in the same connection.
postgres 7.1. and this code involved is to get large objects, so it is
non-auto-commiting.
thanks,
PHilip
java.sql.SQLException: ERROR: SET TRANSACTION ISOLATION LEVEL must be
called be fore any query
at org.postgresql.Connection.ExecSQL(Connection.java:533)
at org.postgresql.Connection.ExecSQL(Connection.java:400)
at
org.postgresql.jdbc2.Connection.doIsolationLevel(Connection.java:412)
at org.postgresql.jdbc2.Connection.commit(Connection.java:226)
...
And from the server log:
NOTICE: CREATE TABLE/PRIMARY KEY will create implicit index 'quit_pkey'
for tab
le 'quit'
ERROR: Relation 'quit' already exists
ERROR: Relation 'plottable_cache_seq' already exists
NOTICE: CREATE TABLE/PRIMARY KEY will create implicit index 'quit_pkey'
for tab
le 'quit'
ERROR: Relation 'quit' already exists
DEBUG: MoveOfflineLogs: remove 0000000C000000E4
pq_flush: send() failed: Broken pipe
pq_recvbuf: unexpected EOF on client connection
DEBUG: MoveOfflineLogs: remove 0000000C000000E5
ERROR: Relation 'event' does not exist
DEBUG: MoveOfflineLogs: remove 0000000C000000E6
NOTICE: BEGIN: already a transaction in progress
ERROR: SET TRANSACTION ISOLATION LEVEL must be called before any query
NOTICE: current transaction is aborted, queries ignored until end of
transactio
n block
NOTICE: current transaction is aborted, queries ignored until end of
transactio
n block
NOTICE: current transaction is aborted, queries ignored until end of
transactio
n block
NOTICE: current transaction is aborted, queries ignored until end of
transactio
n block
NOTICE: current transaction is aborted, queries ignored until end of
transactio
n block
NOTICE: current transaction is aborted, queries ignored until end of
transactio
n block
Philip,
It would be useful to see the rest of your code. It is hard to determine
what is going on.
Dave
-----Original Message-----
From: pgsql-jdbc-owner@postgresql.org
[mailto:pgsql-jdbc-owner@postgresql.org] On Behalf Of Philip Crotwell
Sent: Friday, February 22, 2002 2:54 PM
To: pgsql-jdbc@postgresql.org
Subject: [JDBC] SET TRANSACTION ISOLATION LEVEL
Hi
I got this error, it isn't the first transaction since the server was
started, so I don't understant what it means. The docs seem to suggest
that the READ COMMITTED level is default. If there is a default, why do
I need to set it?
I am AFAIK running single threaded in my java code, so I don't think I
would be dong two separate transactions in the same connection.
postgres 7.1. and this code involved is to get large objects, so it is
non-auto-commiting.
thanks,
PHilip
java.sql.SQLException: ERROR: SET TRANSACTION ISOLATION LEVEL must be
called be fore any query
at org.postgresql.Connection.ExecSQL(Connection.java:533)
at org.postgresql.Connection.ExecSQL(Connection.java:400)
at
org.postgresql.jdbc2.Connection.doIsolationLevel(Connection.java:412)
at org.postgresql.jdbc2.Connection.commit(Connection.java:226)
...
And from the server log:
NOTICE: CREATE TABLE/PRIMARY KEY will create implicit index 'quit_pkey'
for tab le 'quit'
ERROR: Relation 'quit' already exists
ERROR: Relation 'plottable_cache_seq' already exists
NOTICE: CREATE TABLE/PRIMARY KEY will create implicit index 'quit_pkey'
for tab le 'quit'
ERROR: Relation 'quit' already exists
DEBUG: MoveOfflineLogs: remove 0000000C000000E4
pq_flush: send() failed: Broken pipe
pq_recvbuf: unexpected EOF on client connection
DEBUG: MoveOfflineLogs: remove 0000000C000000E5
ERROR: Relation 'event' does not exist
DEBUG: MoveOfflineLogs: remove 0000000C000000E6
NOTICE: BEGIN: already a transaction in progress
ERROR: SET TRANSACTION ISOLATION LEVEL must be called before any query
NOTICE: current transaction is aborted, queries ignored until end of
transactio n block
NOTICE: current transaction is aborted, queries ignored until end of
transactio n block
NOTICE: current transaction is aborted, queries ignored until end of
transactio n block
NOTICE: current transaction is aborted, queries ignored until end of
transactio n block
NOTICE: current transaction is aborted, queries ignored until end of
transactio n block
NOTICE: current transaction is aborted, queries ignored until end of
transactio n block
---------------------------(end of broadcast)---------------------------
TIP 6: Have you searched our list archives?
http://archives.postgresql.org
Philip, From the log file you have provided, the problem is that you are continuing to use a connection after an error has been reported. After any error in postgresql you need to rollback and start a new transaction. You cannot catch an error and continue processing. The error you are seeing is as a result of trying to continue processing after the error without having done a rollback. thanks, --Barry Philip Crotwell wrote: >Hi > >I got this error, it isn't the first transaction since the server was >started, so I don't understant what it means. The docs seem to suggest >that the READ COMMITTED level is default. If there is a default, why do I >need to set it? > >I am AFAIK running single threaded in my java code, so I don't think I >would be dong two separate transactions in the same connection. > >postgres 7.1. and this code involved is to get large objects, so it is >non-auto-commiting. > >thanks, >PHilip > > > java.sql.SQLException: ERROR: SET TRANSACTION ISOLATION LEVEL must be >called be fore any query > > at org.postgresql.Connection.ExecSQL(Connection.java:533) > at org.postgresql.Connection.ExecSQL(Connection.java:400) > at >org.postgresql.jdbc2.Connection.doIsolationLevel(Connection.java:412) > at org.postgresql.jdbc2.Connection.commit(Connection.java:226) > ... > >And from the server log: > >NOTICE: CREATE TABLE/PRIMARY KEY will create implicit index 'quit_pkey' >for tab >le 'quit' >ERROR: Relation 'quit' already exists >ERROR: Relation 'plottable_cache_seq' already exists >NOTICE: CREATE TABLE/PRIMARY KEY will create implicit index 'quit_pkey' >for tab >le 'quit' >ERROR: Relation 'quit' already exists >DEBUG: MoveOfflineLogs: remove 0000000C000000E4 >pq_flush: send() failed: Broken pipe >pq_recvbuf: unexpected EOF on client connection >DEBUG: MoveOfflineLogs: remove 0000000C000000E5 >ERROR: Relation 'event' does not exist >DEBUG: MoveOfflineLogs: remove 0000000C000000E6 >NOTICE: BEGIN: already a transaction in progress >ERROR: SET TRANSACTION ISOLATION LEVEL must be called before any query >NOTICE: current transaction is aborted, queries ignored until end of >transactio >n block >NOTICE: current transaction is aborted, queries ignored until end of >transactio >n block >NOTICE: current transaction is aborted, queries ignored until end of >transactio >n block >NOTICE: current transaction is aborted, queries ignored until end of >transactio >n block >NOTICE: current transaction is aborted, queries ignored until end of >transactio >n block >NOTICE: current transaction is aborted, queries ignored until end of >transactio >n block > > > > >---------------------------(end of broadcast)--------------------------- >TIP 6: Have you searched our list archives? > >http://archives.postgresql.org >
Humm. I never considered needing to rollback a transaction that was
read-only, but Iguess that makes sense.
So, if I am trying to read large objects, then I suppose that my code
should look like this, with a finally to insure that the rollback happens?
Connection conn;
try {
// do queries...
} finally {
conn.rollback();
}
// now connection can be reused
Is there any reason to prefer commit over rollback if the query is
read-only? I would think that they would both simply clean up and release
locks as there were not any changes made.
thanks,
Philip
On Mon, 25 Feb 2002, Barry Lind wrote:
> Philip,
>
> From the log file you have provided, the problem is that you are
> continuing to use a connection after an error has been reported. After
> any error in postgresql you need to rollback and start a new
> transaction. You cannot catch an error and continue processing. The
> error you are seeing is as a result of trying to continue processing
> after the error without having done a rollback.
>
> thanks,
> --Barry
>
> Philip Crotwell wrote:
>
> >Hi
> >
> >I got this error, it isn't the first transaction since the server was
> >started, so I don't understant what it means. The docs seem to suggest
> >that the READ COMMITTED level is default. If there is a default, why do I
> >need to set it?
> >
> >I am AFAIK running single threaded in my java code, so I don't think I
> >would be dong two separate transactions in the same connection.
> >
> >postgres 7.1. and this code involved is to get large objects, so it is
> >non-auto-commiting.
> >
> >thanks,
> >PHilip
> >
> >
> > java.sql.SQLException: ERROR: SET TRANSACTION ISOLATION LEVEL must be
> >called be fore any query
> >
> > at org.postgresql.Connection.ExecSQL(Connection.java:533)
> > at org.postgresql.Connection.ExecSQL(Connection.java:400)
> > at
> >org.postgresql.jdbc2.Connection.doIsolationLevel(Connection.java:412)
> > at org.postgresql.jdbc2.Connection.commit(Connection.java:226)
> > ...
> >
> >And from the server log:
> >
> >NOTICE: CREATE TABLE/PRIMARY KEY will create implicit index 'quit_pkey'
> >for tab
> >le 'quit'
> >ERROR: Relation 'quit' already exists
> >ERROR: Relation 'plottable_cache_seq' already exists
> >NOTICE: CREATE TABLE/PRIMARY KEY will create implicit index 'quit_pkey'
> >for tab
> >le 'quit'
> >ERROR: Relation 'quit' already exists
> >DEBUG: MoveOfflineLogs: remove 0000000C000000E4
> >pq_flush: send() failed: Broken pipe
> >pq_recvbuf: unexpected EOF on client connection
> >DEBUG: MoveOfflineLogs: remove 0000000C000000E5
> >ERROR: Relation 'event' does not exist
> >DEBUG: MoveOfflineLogs: remove 0000000C000000E6
> >NOTICE: BEGIN: already a transaction in progress
> >ERROR: SET TRANSACTION ISOLATION LEVEL must be called before any query
> >NOTICE: current transaction is aborted, queries ignored until end of
> >transactio
> >n block
> >NOTICE: current transaction is aborted, queries ignored until end of
> >transactio
> >n block
> >NOTICE: current transaction is aborted, queries ignored until end of
> >transactio
> >n block
> >NOTICE: current transaction is aborted, queries ignored until end of
> >transactio
> >n block
> >NOTICE: current transaction is aborted, queries ignored until end of
> >transactio
> >n block
> >NOTICE: current transaction is aborted, queries ignored until end of
> >transactio
> >n block
> >
> >
> >
> >
> >---------------------------(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)
>
------------------------------------------------------------------------
Philip Crotwell (803)777-0955 (803)777-0906 fax crotwell@seis.sc.edu
------------------------------------------------------------------------
Philip,
rollback would be preferred. If an error occured during the
transaction, rollback is the only way to end the transaction.
--Barry
Philip Crotwell wrote:
> Humm. I never considered needing to rollback a transaction that was
> read-only, but Iguess that makes sense.
>
> So, if I am trying to read large objects, then I suppose that my code
> should look like this, with a finally to insure that the rollback happens?
>
> Connection conn;
> try {
> // do queries...
> } finally {
> conn.rollback();
> }
> // now connection can be reused
>
> Is there any reason to prefer commit over rollback if the query is
> read-only? I would think that they would both simply clean up and release
> locks as there were not any changes made.
>
> thanks,
> Philip
>
>
> On Mon, 25 Feb 2002, Barry Lind wrote:
>
>
>>Philip,
>>
>> From the log file you have provided, the problem is that you are
>>continuing to use a connection after an error has been reported. After
>>any error in postgresql you need to rollback and start a new
>>transaction. You cannot catch an error and continue processing. The
>>error you are seeing is as a result of trying to continue processing
>>after the error without having done a rollback.
>>
>>thanks,
>>--Barry
>>
>>Philip Crotwell wrote:
>>
>>
>>>Hi
>>>
>>>I got this error, it isn't the first transaction since the server was
>>>started, so I don't understant what it means. The docs seem to suggest
>>>that the READ COMMITTED level is default. If there is a default, why do I
>>>need to set it?
>>>
>>>I am AFAIK running single threaded in my java code, so I don't think I
>>>would be dong two separate transactions in the same connection.
>>>
>>>postgres 7.1. and this code involved is to get large objects, so it is
>>>non-auto-commiting.
>>>
>>>thanks,
>>>PHilip
>>>
>>>
>>>java.sql.SQLException: ERROR: SET TRANSACTION ISOLATION LEVEL must be
>>>called be fore any query
>>>
>>> at org.postgresql.Connection.ExecSQL(Connection.java:533)
>>> at org.postgresql.Connection.ExecSQL(Connection.java:400)
>>> at
>>>org.postgresql.jdbc2.Connection.doIsolationLevel(Connection.java:412)
>>> at org.postgresql.jdbc2.Connection.commit(Connection.java:226)
>>> ...
>>>
>>>And from the server log:
>>>
>>>NOTICE: CREATE TABLE/PRIMARY KEY will create implicit index 'quit_pkey'
>>>for tab
>>>le 'quit'
>>>ERROR: Relation 'quit' already exists
>>>ERROR: Relation 'plottable_cache_seq' already exists
>>>NOTICE: CREATE TABLE/PRIMARY KEY will create implicit index 'quit_pkey'
>>>for tab
>>>le 'quit'
>>>ERROR: Relation 'quit' already exists
>>>DEBUG: MoveOfflineLogs: remove 0000000C000000E4
>>>pq_flush: send() failed: Broken pipe
>>>pq_recvbuf: unexpected EOF on client connection
>>>DEBUG: MoveOfflineLogs: remove 0000000C000000E5
>>>ERROR: Relation 'event' does not exist
>>>DEBUG: MoveOfflineLogs: remove 0000000C000000E6
>>>NOTICE: BEGIN: already a transaction in progress
>>>ERROR: SET TRANSACTION ISOLATION LEVEL must be called before any query
>>>NOTICE: current transaction is aborted, queries ignored until end of
>>>transactio
>>>n block
>>>NOTICE: current transaction is aborted, queries ignored until end of
>>>transactio
>>>n block
>>>NOTICE: current transaction is aborted, queries ignored until end of
>>>transactio
>>>n block
>>>NOTICE: current transaction is aborted, queries ignored until end of
>>>transactio
>>>n block
>>>NOTICE: current transaction is aborted, queries ignored until end of
>>>transactio
>>>n block
>>>NOTICE: current transaction is aborted, queries ignored until end of
>>>transactio
>>>n block
>>>
>>>
>>>
>>>
>>>---------------------------(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)
>>
>>
>
> ------------------------------------------------------------------------
> Philip Crotwell (803)777-0955 (803)777-0906 fax crotwell@seis.sc.edu
> ------------------------------------------------------------------------
>
>
>
>