On Fri, Dec 16, 2005 at 03:23:07PM -0400, Juan Garcés Bustamante wrote: > Hola Guten Abend ! > Estoy trabajando con Postgres 8.0.3 en Ubuntu. Hm, ich benutze Debian, mit PostgreSQL 7.4 in einem Cluster. Wie das bei Ubuntu so funktioniert, weiß ich nicht so richtig. > Necesito realizar transacciones anidadas, pero no logro que se aborten > transacciones intermedias al abortarse una superior. Ich glaube Du mußt Savepoints benutzen, wenn Du eine Zwischentransaktion innerhalb einer anderen starten willst. Es natürlich klar, daß innerhalb *einer* Transaktion jeder Fehler die gesamte Verarbeitung abbricht ! > Ejemplo: > > BEGIN WORK; > INSERT INTO mitabla VALUES (1); > BEGIN TRANSACTION; > INSERT INTO mitabla VALUES (2); > INSERT INTO mitabla VALUES (3); > COMMIT TRANSACTION; > INSERT INTO mitabla VALUES (4); > ROLLBACK WORK; > > El "ROLLBACK WORK" no aborta la TRANSACTION. Das kann ich mir nicht vorstellen. Bist Du sicher, daß BEGIN TRANSACTION die richtige Syntax ist für das, was Du machen willst ? > Resultado de la consulta: > > mitabla > ======== > 1 > 2 > 3 > (3 rows) Ach so, klar, mE können BEGINs geschachtelt werden, ohne daß ein Problem auftritt. Allerdings beendet dann COMMIT alle begonnenen Transaktionen auf einmal. Da das INSERT ... 4 erst nach dem COMMIT, aber vor dem ROLLBACK kommt, wird es richtig von dem ROLLBACK erfasst und erscheint nicht in der Tabelle. > Resultado esperado: > > mitabla > ======== > > (0 rows) Nee, nee. Deine Erwartung an das Ergebnis ist falsch. > Alguna idea?? Naja, siehe oben :-) > Gracias. Kein Problem. Gern wieder. Karsten -- GPG key ID E4071346 @ wwwkeys.pgp.net E167 67FD A291 2BEA 73BD 4537 78B9 A9F9 E407 1346