Lock menos restrictivo

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

Responses

Browse pgsql-es-ayuda by date

  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