From: | "Gustavo" <gustavor(at)intercomgi(dot)net> |
---|---|
To: | "PostgreEs" <pgsql-es-ayuda(at)postgresql(dot)org> |
Subject: | Lock menos restrictivo |
Date: | 2007-04-18 11:32:48 |
Message-ID: | 002f01c781ad$51b8f670$e802a8c0@gustavo |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
Buenas, me ha surgido una duda sobre como manejar una situacion de sincronizacion en PostgreSQL.
El caso es el siguiente: Tengo la siguiente funcion:
CREATE OR REPLACE FUNCTION "servicio"."alta_maquina" (id_usr bigint, nombre_maquina varchar) RETURNS bigint AS
$body$
DECLARE
id_maquina bigint;
BEGIN
SELECT servicio.vista_maquina.id_recurso INTO id_maquina FROM servicio.vista_maquina WHERE servicio.vista_maquina.id_usuario=id_usr AND servicio.vista_maquina.nombre=nombre_maquina;
IF NOT FOUND THEN
INSERT into servicio.vista_maquina (id_usuario,nombre,cant_versiones_completas) values (id_usr,nombre_maquina,1);
RETURN currval('servicio.recurso_id_recurso_seq'::text::regclass);
ELSE
RETURN id_maquina;
END IF;
END
$body$
LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;
Ahora puede suceder que si varias transacciones ejecutan en simultaneo la funcion tenga problemas de insercion duplicada. Que tengo que hacer? Lock a nivel de tabla?. Estoy tratando de poner el lock menos restrictivo porque se espera mucho trafico en la fucncon y quiero evitar un cuello de botella. Cualquier sugerencia será bienvenida.
Desde ya muchas gracias
Gustavo
From | Date | Subject | |
---|---|---|---|
Next Message | Alvaro Herrera | 2007-04-18 12:48:18 | Re: Lock menos restrictivo |
Previous Message | Sandro Martínez | 2007-04-18 09:57:48 | sobre tipos de datos JDBC y Postgres |