From: | Alvaro Herrera <alvherre(at)dcc(dot)uchile(dot)cl> |
---|---|
To: | "Juan P(dot) Aviles" <jputem(at)yahoo(dot)es> |
Cc: | pgsql-es-ayuda(at)postgresql(dot)org |
Subject: | Re: Row level lock in plpgsql |
Date: | 2005-04-06 21:37:39 |
Message-ID: | 20050406213738.GA24554@dcc.uchile.cl |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
On Wed, Apr 06, 2005 at 10:20:58PM +0200, Juan P. Aviles wrote:
> Mi duda era , que pasa si dos procediemientos llegan al mismo tiempo a
> la parte del select con un mismo producto?, segun las pruebas que hice
> ambos toman el mismo valor de reg.saldo_total, y queda la escoba .
>
> Lo que necesito es bloquear la fila que me devuelve el select hasta
> que haga el incremento o disminucion y el posterior insert en la tabla
> , estuve leyendo la documentacion y me encontre con row level lock que
> es posible utilizando el select for update, lo probe y no me funciono.
Define "no me funciono". Aca funciona perfectamente:
alvherre=# create table a (foo int);
CREATE TABLE
alvherre=# insert into a values (1);
INSERT 17311 1
alvherre=# create function asd (int ) returns void language plpgsql as
$$ begin perform * from a where foo=$1 for update; return; end$$;
CREATE FUNCTION
alvherre=# begin;
BEGIN
alvherre=# select asd(1);
asd
-----
(1 fila)
En otra sesion:
alvherre=# select asd(1);
se queda bloqueado hasta que haga commit en la primera.
> Busque en internet y me encontre ha alguien que dice que no se pueden
> hacer select for update en plpgsql.
Esta equivocado.
--
Alvaro Herrera (<alvherre[(at)]dcc(dot)uchile(dot)cl>)
"En las profundidades de nuestro inconsciente hay una obsesiva necesidad
de un universo lógico y coherente. Pero el universo real se halla siempre
un paso más allá de la lógica" (Irulan)
From | Date | Subject | |
---|---|---|---|
Next Message | Alvaro Herrera | 2005-04-06 21:40:24 | Re: postgres no funciona |
Previous Message | Julio Rivero | 2005-04-06 21:27:31 | Suscribe to pgsql-es-ayuda |