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?
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 |