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

From: Fernando Romo <pop(at)cofradia(dot)org>
To: pgsql-ayuda(at)tlali(dot)iztacala(dot)unam(dot)mx
Subject: [Fwd: Re: [Pgsql-ayuda] Como saco el valor de un serial despues de una inserción de manera eficiente]
Date: 2002-03-01 09:16:17
Message-ID: 1014974185.14551.8.camel@vaio.xaos
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

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
>

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Manuel Sugawara 2002-03-01 20:57:04 Re: [Pgsql-ayuda] Como saco el valor de un serial despues de una inserción de manera eficiente
Previous Message Fernando Romo 2002-03-01 08:27:29 [Pgsql-ayuda] Como saco el valor de un serial despues de una inserción de manera eficiente