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

From: "sondrobe" <sondrobe(at)nysnet(dot)com(dot)ar>
To: <pgsql-ayuda(at)tlali(dot)iztacala(dot)unam(dot)mx>
Subject: RE: [Pgsql-ayuda] De campos seriales, commits y roll-backs
Date: 2002-07-24 12:46:19
Message-ID: 000e01c23366$38ba2800$0100a8c0@sondrobe
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?
>

¡¿Qué interrogante?!, teóricamente sí, ahora, habrá que ver dónde es que
tiene los últimos datos para ser incrementados (por ejemplo el id de la
tablña donde insertas), quiero creer que están en el catálogo del DBMS o por
algún lado tendrán que estar, y por lo visto con el roll-back esos datos no
son deshechos.

Habrá que saber de dónde está leyendo o bien reportar que los campos
auto incrementales no son restituidos a su estado original.

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

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

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Jose Antonio Leo 2002-07-24 12:49:59 [Pgsql-ayuda] Funcion en plpgsql
Previous Message Jose Antonio Leo 2002-07-24 12:45:59 RE: [Pgsql-ayuda] Error desconocido!!!