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

sondrobe sondrobe@nysnet.com.ar
Wed, 24 Jul 2002 09:46:19 -0300


> Hola,
>
> Observ=E9 hoy algo bastante curioso: Estoy haciendo una aplicacioncita =
en
> Perl, usando PostgreSQL 7.2.1. Tengo una tabla que tiene un campo seria=
l.
> Ahora, para hacer unas pruebas, hice lo siguiente: (simplificado)
>
> 1  $dbh->{'AutoCommit'} =3D 0;
> 2  $sth =3D $dbh->prepare('INSERT INTO tabla (campo1, campo2, campo3) V=
ALUES
(?,?,?)');
> 3  $sth->execute(1,2,3);
> 4  $sth->execute(4,5,6);
> 5  $sth->finish;
> 6
> 7  $sth =3D $dbh->prepare('SELECT id,campo1,campo2,campo3 FROM tabla');
> 8  $sth->execute;
> 9  while (my @row =3D $sth->fetchrow_array) {
> 10     print join(', ', @row);
> 11 }
> 12 $sth->finish;
> 13 $dbh->rollback;
>
> O, traduci=E9ndolo al espa=F1ol:
> 1: Deshabilita AutoCommit, haciendo necesario un commit para efectuar l=
os
>    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=F3n contenida en la tabla.
> 13: Revierte los cambios efectuados.
>
> Entiendo que este programita deber=EDa 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=E1 revirtiendo los cambios en la tabla=
,
> est=E1 efectuando los cambios en la secuencia a la que est=E1 asociado =
id.
>
> Buscando la l=F3gica de esto, se me hace correcto, pues evita que si do=
s
> solicitudes se efect=FAan m=E1s o menos a la vez, y una de ellas es rev=
ertida,
> cambie la secuencia en la que aparecen ingresadas... Sin embargo, es un=
a
> preocupaci=F3n te=F3rica: =BFQu=E9 no un rollback debe dejar la BD *tal=
 cual
> estaba* antes de la transacci=F3n?
>

    =A1=BFQu=E9 interrogante?!, te=F3ricamente s=ED, ahora, habr=E1 que v=
er d=F3nde es que
tiene los =FAltimos datos para ser incrementados (por ejemplo el id de la
tabl=F1a donde insertas), quiero creer que est=E1n en el cat=E1logo del D=
BMS o por
alg=FAn lado tendr=E1n que estar, y por lo visto con el roll-back esos da=
tos no
son deshechos.

    Habr=E1 que saber de d=F3nde est=E1 leyendo o bien reportar que los c=
ampos
auto incrementales no son restituidos a su estado original.

    Es mi humilde opini=F3n al respecto hace poco que he entrado a nivel
te=F3rico en los DBMS de la mano de Date y bueno, es lo que me dicta mi
conocimiento te=F3rico al respecto.

--
gonzalo aguirre - sondrobe [at] iespana [dot] es