Re: PostgreSQL 7.4.1: Transaktionsproblem

From: Andreas Seltenreich <seltenreich(at)gmx(dot)de>
To: Denkewitz Lars <lars(dot)denkewitz(at)dogro(dot)de>
Cc: pgsql-de-allgemein(at)postgresql(dot)org
Subject: Re: PostgreSQL 7.4.1: Transaktionsproblem
Date: 2005-08-11 17:23:20
Message-ID: 8764ucfkvr.fsf@gate450.dyndns.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-de-allgemein

Denkewitz Lars schrob:

[...]
> EXEC SQL AT :PSQL_connect SET AUTOCOMMIT TO ON;
>
> EXEC SQL at :PSQL_connect DECLARE c_testdb CURSOR WITH HOLD FOR
> SELECT nummer_id,nummer from test2db where nummer_id > 0
> order by nummer_id;
[...]
> EXEC SQL BEGIN;
>
> EXEC SQL AT :PSQL_connect update test2db set nummer
> = :nummer where nummer_id = :ID;
> lerror = sqlca.sqlcode;
> fprintf(stderr,"update sqlcode:
> %ld\n",sqlca.sqlcode);
>
> if ((ID == 3) || (ID == 6)) {
> EXEC SQL ROLLBACK;
> } else {
> EXEC SQL COMMIT;
> }
> EXEC SQL AT :PSQL_connect fetch c_testdb into
[...]

> D.h. dass bei den Nummern 3 und 6 zunächst der Satz geupdatet wurde, dass
> Rollback gezogen und anschließend mit dem WITH HOLD Cursor weitergefetcht
> werden konnte.

Das Verhalten im obigen Beispiel ist aber durchaus mit dem Standard
vereinbar, da der Cursor ja in einer eigenen, durch das SET AUTOCOMMIT
TO ON impliziert committeten Transaktion erstellt wurde.

Relevant für den holdable cursor wäre ein ROLLBACK nur, wenn die
Transaktion, in der der cursor erstellt wurde, zurückgerollt werden
würde.

Gruß
Andreas

In response to

Browse pgsql-de-allgemein by date

  From Date Subject
Next Message Stefan 'Kaishakunin' Schumacher 2005-08-11 21:01:27 Re: ADM: threading in der Liste
Previous Message Denkewitz Lars 2005-08-11 15:52:08 Re: PostgreSQL 7.4.1: Transaktionsproblem