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

Felipe E. Barousse B. fbarousse@piensa.com
01 Mar 2002 15:30:48 -0600


currval() lo hace, siempre y cuando ejecutes el currval() inmediatamente
(repito, INMEDIATAMENTE) despues del insert. =20

Adem=E1s, ayuda que el bloque donde haces el insert deber=EDa estar dentro
de un BEGIN WORK....COMMIT WORK....

La siguiente p=E1gina -totalmente actualizada al momento de escribir este
mensaje- tiene mas info (en Ingles...) al respecto.

http://www.ca.postgresql.org/docs/faq-english.html

Espero sirva esta informaci=F3n

Felipe Barousse
Bufete Consultor de Mexico - Piensa Technologies.
www.piensa.com



On Fri, 2002-03-01 at 03:16, Fernando Romo wrote:
> Suena bien pero hay un "peque=F1o" problema: La concurrencia.
>=20
> 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.
>=20
> 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.
>=20
> Currval lo hace o hay otro workaround al respecto.
>=20
> Saludos.... El Pop
>=20
>=20
>=20
> 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 tra=
e
> > > 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
>=20
>=20
>=20
>=20
> _______________________________________________
> Pgsql-ayuda mailing list
> Pgsql-ayuda@tlali.iztacala.unam.mx
> http://tlali.iztacala.unam.mx/mailman/listinfo/pgsql-ayuda