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-08 19:46:09 |
Message-ID: | 20050408194609.GA19299@dcc.uchile.cl |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
On Thu, Apr 07, 2005 at 07:44:35PM +0200, Juan P. Aviles wrote:
> "no me funciono" : Lo que hago ha manera de prueba es en un
> procedimiento:
>
> Select into reg * from tabla1 where prod='prod1' order by registro for
> update; para obtener los valores de la fila que quiero bloquear. y su
> posterior Insert en la misma tabla con los datos nuevos y en otro
> procedimiento hago lo mismo salvo que entre el select y el insert hago
> un loop de un cierto tiempo. Despues llamo al segundo procedimiento y
> luego al primero cosa que el segundo se quede en el loop (con la fila
> bloqueada supuestamente por el for update) y luego lanzo el primer
> procedimiento, pero, este me afecta de inmediato la fila sin tomar en
> cuenta el bloqueo. Es es lo que no me funciona. :)
No entendi para nada tu procedimiento. Que tal si muestras el codigo?
> En ningun caso he probado la forma que tu sugieres con perform
> me puedes dar mas datos acerca de esto, de todas maneras lo voy
> a probar de inmediato.
Eso no afecta en nada.
> Tendra algo que ver que trabajo con autocommit desde python ????
DOH!!!! El SELECT FOR UPDATE solo bloquea durante la transaccion que lo
encierra. Si no has iniciado una transaccion (y particularmente si
tienes "autocommit" activado, que es el modo normal en Postgres)
entonces la transaccion termina inmediatamente y por lo tanto el lock se
libera.
Si quieres que el lock persista, tienes que encerrar las operaciones en
una transaccion (BEGIN/COMMIT)
> Tengo entendido que cualquier procedimiento que yo llame desde python
> o desde cualquier lenguaje automaticamente inicia una transaccion y
> hace un commit si esta termina bien o un rollback si termina mal.
No exactamente, pero algo parecido.
--
Alvaro Herrera (<alvherre[(at)]dcc(dot)uchile(dot)cl>)
Y una voz del caos me habló y me dijo
"Sonríe y sé feliz, podría ser peor".
Y sonreí. Y fui feliz.
Y fue peor.
From | Date | Subject | |
---|---|---|---|
Next Message | Jaime Casanova | 2005-04-08 19:54:29 | Re: Macros |
Previous Message | Jessie Cordoba | 2005-04-08 19:40:34 | SERVIDOR PORTGRESQL 8.0 |