[Pgsql-ayuda] De campos seriales, commits y roll-backs

From: Gunnar Wolf <gwolf(at)campus(dot)iztacala(dot)unam(dot)mx>
To: pgsql-ayuda(at)tlali(dot)iztacala(dot)unam(dot)mx
Subject: [Pgsql-ayuda] De campos seriales, commits y roll-backs
Date: 2002-07-23 21:22:43
Message-ID: Pine.BSO.4.44.0207231609570.7878-100000@campus.iztacala.unam.mx
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Hola,

Observé hoy algo bastante curioso: Estoy haciendo una aplicacioncita en
Perl, usando PostgreSQL 7.2.1. Tengo una tabla que tiene un campo serial.
Ahora, para hacer unas pruebas, hice lo siguiente: (simplificado)

1 $dbh->{'AutoCommit'} = 0;
2 $sth = $dbh->prepare('INSERT INTO tabla (campo1, campo2, campo3) VALUES (?,?,?)');
3 $sth->execute(1,2,3);
4 $sth->execute(4,5,6);
5 $sth->finish;
6
7 $sth = $dbh->prepare('SELECT id,campo1,campo2,campo3 FROM tabla');
8 $sth->execute;
9 while (my @row = $sth->fetchrow_array) {
10 print join(', ', @row);
11 }
12 $sth->finish;
13 $dbh->rollback;

O, traduciéndolo al español:
1: Deshabilita AutoCommit, haciendo necesario un commit para efectuar los
cambios, o un rollback para revertirlos.
2-5: Inserta los renglones (1,2,3) y (4,5,6) en la tabla.
7-12: Muestra toda la información contenida en la tabla.
13: Revierte los cambios efectuados.

Entiendo que este programita debería tener un impacto nulo en la BD, por
el rollback que estoy usando al final. Sin embargo, si lo corro una vez,
me da:

1, 1, 2, 3
2, 4, 5, 6

y si lo corro una segunda vez:

3, 1, 2, 3
4, 4, 5, 6

Lo que me indica que si bien está revirtiendo los cambios en la tabla,
está efectuando los cambios en la secuencia a la que está asociado id.

Buscando la lógica de esto, se me hace correcto, pues evita que si dos
solicitudes se efectúan más o menos a la vez, y una de ellas es revertida,
cambie la secuencia en la que aparecen ingresadas... Sin embargo, es una
preocupación teórica: ¿Qué no un rollback debe dejar la BD *tal cual
estaba* antes de la transacción?

Saludos,

--
Gunnar Wolf - gwolf(at)campus(dot)iztacala(dot)unam(dot)mx - (+52-55)5623-1118
PGP key 1024D/8BB527AF 2001-10-23
Fingerprint: 0C79 D2D1 2C4E 9CE4 5973 F800 D80E F35A 8BB5 27AF

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Manuel Sugawara 2002-07-23 21:59:21 Re: [Pgsql-ayuda] De campos seriales, commits y roll-backs
Previous Message Fernando Romo 2002-07-23 13:35:03 [Pgsql-ayuda] Pregunta sobre performance de Postgresql