Re: [Pgsql-ayuda] HELP: con SECUENCIAS y el currval

From: Rodrigo Gallardo <lgallardo(at)computacion(dot)cs(dot)cinvestav(dot)mx>
To: Pgsql-ayuda(at)tlali(dot)iztacala(dot)unam(dot)mx
Subject: Re: [Pgsql-ayuda] HELP: con SECUENCIAS y el currval
Date: 2003-02-04 01:13:12
Message-ID: ja4r7k3l1z.fsf@computacion.cs.cinvestav.mx
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

>>>>> "Ronald" == Ronald Serna <rserna(at)correo(dot)inictel(dot)gob(dot)pe> writes:

> Amigos estoy trabajando con secuencias. Revisando la
> docuementacion hay un apartado que AVISA que el nextval puede
> generar valores fuera de secuencia, (lo cual seria muy
> desastrozo para cualquier disenno BD) cuando en el backend
> cachea el proceso de generacion(Como es esto y como
> comprobarlo??) de secuebncias.

No es desastrozo. El chiste de las secuencias es generar un
identificador unico para cada registro. Por motivos de eficiencia, una
transacción puede reservar varios números de la secuencia por
adelantado, por si se insertan varios registros. Y si resulta que
tardas en insertarlos otra transacción puede inserat antes que tú, con
números reservados despues. ¿Como comprobarlo? A posteriori, obten los
registros en el orden que salen naturalmente (sin SORT) y ve si la
secuencia está en orden. Pero en todo caso esto no te importa. No se
usan secuencias para ver el orden de inserción, sino sólo pare generar
identificadores únicos. Si el orden de inserción es importante, usa un
timestamp.

> Para obtener el currval(), ejecuto: SELECT
> currval('estudiante_id_estudiante_seq') y obtengo del
> phpPgAdmin: ERROR: estudiante_id_estudiante_seq.currval is not
> yet defined in this session Your query:

> Por Que es esto??
Parte de la optimización anterior. El currval() no está definido sino
hasta despues de hacer un nextval(). Normalmente no importa, por que
no lo usas deirectamente, sino que dejas que un trigger lo meta cuando
insertas en una tabla. Si deveras requieres saber con que id quedó un
registro al insertarlo haces algo como:

select next_val()
construye el insert con el id obtenido
inserta el registro

--
Charlie was a chemist,
But Charlie is no more.
For what he thought was H2O,
Was H2SO4.

Rodrigo
PGP key 1024D/ADC9BC28 2002-02-26 [expires 2004-02-26]
Fingerprint: 7C81 E60C 442E 8FBC D975 2F49 0199 8318 ADC9 BC28

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Christian Gonzalez 2003-02-04 12:45:00 Re: [Pgsql-ayuda] RE: Pgsql-ayuda digest, Vol 1 #407 - 1 msg
Previous Message Ronald Serna 2003-02-03 20:54:32 [Pgsql-ayuda] HELP: con SECUENCIAS y el currval