Re: PostgreSQL 7.4.1: Transaktionsproblem

From: Denkewitz Lars <lars(dot)denkewitz(at)dogro(dot)de>
To: 'Andreas Seltenreich' <andreas+pg(at)gate450(dot)dyndns(dot)org>, 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 11:14:48
Message-ID: 527CFCD935ABD711A86E0003473A917E077C1E@SpiritII
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-de-allgemein

Hallo,

vielen Dank für die Mail.

In einem kleinen Beispiel bleibt der Cursor nach einem Rollback auch offen,
d.h. dann wohl so in der Art, dass ich da quasi Glück habe? Es gilt dann so
in etwa die Aussage: Du kannst dich drauf verlassen, dass der Cursor offen
bleibt bei einem Commit, alles andere ist unbestimmt, der Cursor kann bei
einem Rollback offen bleiben oder auch nicht?

Bei Informix in der Hilfe, von dem aus wir nach PostgreSQL portieren wollten
steht es klarer definiert:
"In ESQL/C, the ROLLBACK WORK statement closes all open cursors except those
that are declared with hold. Hold cursors remain open after a transaction is
committed or rolled back."

Bei Oracle, welches wir auch unterstützen steht:
"E121-17, WITH HOLD cursors (in the standard, a cursor is not held through a
ROLLBACK, but Oracle does hold through ROLLBACK)"

Hier wird also der von Dir zitierte SQL99-Standard bestätigt.

Das Schlimme ist doch jetzt eigentlich, dass PostgreSQL bei Cursern mit
Rollback kein definiertes Verhalten zeigt, der Standard sagt wenigstens: die
Cursor werden geschlossen! Oracle und Informix lassen die Cursor offen! Bei
PostgreSQL weiß man es nicht!?

Gruß
Lars Denkewitz

-----Ursprüngliche Nachricht-----
Von: Andreas Seltenreich [mailto:andreas+pg(at)gate450(dot)dyndns(dot)org]
Gesendet: Mittwoch, 10. August 2005 17:26
An: Denkewitz Lars
Cc: pgsql-de-allgemein(at)postgresql(dot)org
Betreff: Re: PostgreSQL 7.4.1: Transaktionsproblem

Denkewitz Lars schrob:

> wir nutzen ein 4GL-Tool, das für uns die DB-Verbindung herstellt. Dabei
wird
> von diesem ein WITH-HOLD-Cursor auf der DB geöffnet, der nach einem
ROLLBACK
> plötzlich nicht mehr zur Verfügung steht (er müßte ja eigentlich ein
> Transaktionsende "überleben", da er with hold ist...). Wenn dann das CLOSE

Wo steht denn, daß er ein rollback überleben müßte?

Laut Standard tut er das nicht:

SQL99:
--8<---------------cut here---------------start------------->8---
A holdable cursor is closed no matter what its state if the
SQL-transaction is terminated with a rollback operation.
--8<---------------cut here---------------end--------------->8---

Und das Handbuch stimmt mit dem überein:
--8<---------------cut here---------------start------------->8---
WITHOUT HOLD

WITH HOLD specifies that the cursor may continue to be used after
the transaction that created it successfully commits.
--8<---------------cut here---------------end--------------->8---

Gruß
Andreas
--

Responses

Browse pgsql-de-allgemein by date

  From Date Subject
Next Message Andreas Seltenreich 2005-08-11 15:19:58 Re: PostgreSQL 7.4.1: Transaktionsproblem
Previous Message Kretschmer Andreas 2005-08-10 17:28:44 Re: [despammed] ADM: threading in der Liste