Re: [Fwd: Re: [Pgsql-ayuda] Como saco el valor de un serial despues de una inserción de manera eficiente]

From: "Felipe E(dot) Barousse B(dot)" <fbarousse(at)piensa(dot)com>
To: Fernando Romo <pop(at)cofradia(dot)org>
Cc: pgsql-ayuda(at)tlali(dot)iztacala(dot)unam(dot)mx
Subject: Re: [Fwd: Re: [Pgsql-ayuda] Como saco el valor de un serial despues de una inserción de manera eficiente]
Date: 2002-03-01 21:30:48
Message-ID: 1015018258.27463.123.camel@monster.piensa.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

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

Además, ayuda que el bloque donde haces el insert debería estar dentro
de un BEGIN WORK....COMMIT WORK....

La siguiente página -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ón

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

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Pablo Araujo Fernández 2002-03-02 10:51:21 [Pgsql-ayuda] MySQL
Previous Message Felipe E. Barousse B. 2002-03-01 21:02:25 Re: [Pgsql-ayuda] Como saco el valor de un serial despues de una inserción de manera eficiente