Re: Consulta sobre lock table

From: Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>
To: Damián Culotta <dculotta(at)fibertel(dot)com(dot)ar>
Cc: Ayuda PostgreSql <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Consulta sobre lock table
Date: 2005-10-10 22:47:57
Message-ID: 20051010224757.GA8320@surnet.cl
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Damián Culotta wrote:
> Buenas tardes lista.
> Quisiera saber cuál sería la forma correcta de hacer el siguiente
> procedimiento (el ejemplo que describo, es la forma en la cual lo
> resolvía con Mysql).

> Lo que necesito es grabar un registro, y capturar el ID que se genera,
> para poder llevarme ese ID a otras tablas y encadenar información.

La manera es esta:

create table foo (foo_id serial primary key, a int, b text, c numeric, ...);
create table bar (foo_id integer not null references foo, ...)
insert into foo (a, b, c, ...) values (42, 'foobar', 123.123, ...);

insert into bar (foo_id, ...) values (currval('foo_foo_id_seq'), ...)

Aca, la funcion currval() obtiene el ultimo valor asignado a la
secuencia foo_foo_id_seq en tu sesion. Observa que es el valor asignado
a _tu_ sesion, es decir, si otra sesion en el intertanto hizo lo mismo,
el valor que se te devuelve es independiente de eso. Las secuencias
estan definidas precisamente para resolver este problema, en forma
eficiente y sin tener que bloquar la tabla.

Para mas informacion, busca el topico "sequences" en el indice del
manual.

--
Alvaro Herrera Developer, http://www.PostgreSQL.org
"In Europe they call me Niklaus Wirth; in the US they call me Nickel's worth.
That's because in Europe they call me by name, and in the US by value!"

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alfredo Rico 2005-10-11 00:45:05 Pregunta puntual...
Previous Message Damián Culotta 2005-10-10 22:33:13 Consulta sobre lock table