Обсуждение: Tracing commits on the server

Поиск
Список
Период
Сортировка

Tracing commits on the server

От
Jeffrey Tenny
Дата:
I'm trying to debug some database transaction problems, 8.0.3

On the server I've enabled statement logging with the configuration
parameter:

log_statement = 'all'

Works peachy.  But my jdbc transaction commits aren't logged,
and I can't figure out how to see when the server is processing logical
statement commits. (It is definitely not an auto-commit application).

I see one or two commits like this:

LOG:  statement: begin; select getdatabaseencoding(); commit
LOG:  statement: BEGIN; SELECT usesuper FROM pg_catalog.pg_user WHERE
usename = 'Foo'; COMMIT


I'm not sure where those are coming from, an artifact of some command
line tool or jdbc driver directive.


And I get some of these:

LOG:  statement: begin; select getdatabaseencoding(); commit
LOG:  statement: BEGIN;SELECT version();
LOG:  statement: COMMIT;

I don't think those are comming from my app.

Other than that, I see some of these:

LOG:  statement: SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION
LEVEL SERIALIZABLE
LOG:  statement: SET SESSION CHARACTERISTICS AS TRANSACTION READ ONLY
LOG:  statement: SET SESSION CHARACTERISTICS AS TRANSACTION READ WRITE


Presumably they're being executed at the start of a new transaction, but
there's no sign of any COMMIT statements before them.

What can I do to see where the database is committing the transaction?

Re: Tracing commits on the server

От
Oliver Jowett
Дата:
Jeffrey Tenny wrote:
> I'm trying to debug some database transaction problems, 8.0.3
>
> On the server I've enabled statement logging with the configuration
> parameter:
>
> log_statement = 'all'

Try an 8.1 beta -- 8.0 backends don't log the extended query protocol
(which the JDBC driver uses) well at all.

Alternatively, force use of protocol version 2 (pass protocolVersion=2
as a URL parameter), although this also causes other behavioural changes
in the driver.

-O