[Fwd: Re: [Pgsql-ayuda] Como saco el valor de un serial despues de una =?ISO-8859-1?Q?inserci=F3n?= de manera eficiente]

Fernando Romo pop@cofradia.org
01 Mar 2002 15:16:17 +0600


Suena bien pero hay un "peque=F1o" problema: La concurrencia.

En el MS SQL la variable @@IDENTITY era esclusiva de "la sesi=F3n", es
decir que si tenia a 20 chatos capturando, el valor dado era "UNICO", en
el ejemplo usando currval tiene el problema que alguien puede llevarse
el valor de otra transacci=F3n.

Por ejemplo  tengo en una tiendita electronica a 100 chatos levantando
pedidos y puede pasar que un cliente se lleve el numero de Orden de otro
usando currval, como garantizo que este numero "ES" el que efectuo con
el Insert si es que el valor de "currval" no va aunado a la sesion de
cada petici=F3n.

Currval lo hace o hay otro workaround al respecto.

Saludos.... El Pop



On Sat, 2002-03-02 at 03:02, Felipe E. Barousse B. wrote:
> Hola Fernando:
>=20
> Es muy f=E1cil:
>=20
> Suponiendo que tengas la tabla:
>=20
> id_dato   integer   not null default nextval('tabla_id_dato_seq'::text)
> datos     text
>=20
> (El serial es el id_dato y por supuesto tiene su indice
> "tabla_id_dato_pkey")
>=20
> La secuencia de "seriales" se guarda en tabla_id_dato_seq y puedes
> obtener el valor que se acaba de generar despues de un insert con:
>=20
> select last_value from tabla_id_datos_seq;
>=20
> La otra forma de usarlo es usando la funcion de Postgres "currval()"
> JUSTO DESPUES del INSERT, (ejemplo tomado del manual):
>=20
>  INSERT INTO person (name) VALUES ('Blaise Pascal');
>     new_id =3D output of "SELECT currval('person_id_seq')";
>=20
>=20
>=20
> Dato adicional: si modificas la secuencia (un DROP SEQUENCE y luego
> CREATE SECUENCE...) puedes lograr alterar los "seriales".
>=20
> Espero se entienda con mi ejemplo de "table" y "id_dato"
>=20
> Un saludo
>=20
> Felipe Barousse
> Bufete Consultor de Mexico - Piensa Technologies.
> www.piensa.com
>=20
>=20
> On Fri, 2002-03-01 at 02:27, Fernando Romo wrote:
> > Estimados:
> >=20
> > Necesito insertar un registro en una tabla que tiene un tipo de campo
> > serial y sacar inmediatamente el valor del registro que se acaba de
> > actualizar.
> >=20
> > Por ejemplo en MS SQL uno usa una variable llamada @@IDENTITY que trae
> > el valor de este campo despues de un INSERT.
> >=20
> > En pgsql hay algo similar?
> >=20
> > Saludos... El Pop
> >=20
> >=20
> >=20
> > _______________________________________________
> > Pgsql-ayuda mailing list
> > Pgsql-ayuda@tlali.iztacala.unam.mx
> > http://tlali.iztacala.unam.mx/mailman/listinfo/pgsql-ayuda
>=20