RE: Secuencias (Consulta) II

From: mmiranda(at)americatel(dot)com(dot)sv
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: RE: Secuencias (Consulta) II
Date: 2005-05-12 21:06:14
Message-ID: 76E0DAA32C39D711B6EC0002B364A6FA045444C7@amsal01exc01.americatel.com.sv
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

pgsql-es-ayuda-owner(at)postgresql(dot)org wrote:
> Alvaro Herrera wrote:
>> On Wed, May 11, 2005 at 03:19:33PM -0600, mmiranda(at)americatel(dot)com(dot)sv
>> wrote:
>>> Miranda Gomez Miguel Angel wrote:
>>
>>>> Podria crear una tabla que relacione pais -> id , verificar en el
>>>> trigger cual es el ultimo id generado por pais y asignarselo al
>>>> registro que estoy insertando, me parece buena idea. aunque tendria
>>>> repetido el id en dos tablas diferentes.. ummm
>>>
>>> Correccion, no tendria repetido el id, la columna guardaria el
>>> ultimo id generado para ese, me voy con esa idea,
>>> Gracias
>>
>> Eso falla en situaciones de concurrencia ...
>

Hola, nuevamente con lo las secuencias, leyendo aqui y alla he encontrado
que podria funcionar lo siguiente:

crear una secuencia para id de cada pais:

CREATE SEQUENCE id_pais1
CREATE SEQUENCE id_pais2

entonces al momento de hacer el insert dentro de la funcion haria lo
siguiente:
suponiendo que estoy insertando para el pais1, quiero retornar el id y el
nombre del cliente recien ingresado en un record

$$
DECLARE r record;
pais1 alias for $1;

INSERT INTO clientes (id, pais, cliente)
VALUES (NEXTVAL('id_pais1'), pais1, 'Miguel M');

r.id = CURRVAL('id_pais1');
r.cliente = 'Miguel M';

RETURN r;
$$

La columna id de la tabla clientes ya no seria serial, sino un integer
normal.
Como las funciones que manipulan secuencias lo hacen de forma atomica, seria
a prueba de operaciones concurrentes,
Funciona no?

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Ricardo Fuentes Pereira 2005-05-12 21:58:32 Parametros en Procedimientos almacenados
Previous Message John Isler 2005-05-12 21:05:37 Tuning