Re: Control de acceso a tablas

From: Alvaro Herrera <alvherre(at)surnet(dot)cl>
To: Grover Navia <grover8navia(at)yahoo(dot)es>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Control de acceso a tablas
Date: 2005-05-11 15:10:05
Message-ID: 20050511151005.GB8508@surnet.cl
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

On Wed, May 11, 2005 at 04:24:09PM +0200, Grover Navia wrote:

Hola,

> Esto es lo que requiero hacer, tengo una tabla "miTabla", al cual debe
> acceder un solo usuario del sistema a la ves (desde una estación de
> trabajo), ya sea para lectura o escritura, mientras el seguno,
> tercero, etc. no deben tener acceso a "miTabla" mientras el primero en
> acceder NO haya terminado toda sus operaciones de lectura o escritura.
> ¿Como puedo hacer esto ??

Usando LOCK TABLE.

> Entiendo que las Transacciones de Postgresql no pueden operar de esta
> manera (ojala me equivoque en esto, pero es asi como entendi al leer
> el documento de Transaction Processing in PostgreSQL).

Sospecho que tu problema es que la politica de bloqueo no esta bien
definida. Si quieres bloquear todos los usuarios de una tabla mientras
uno hace algo, tiene que ser con LOCK TABLE. Pero probablemente no es
eso realmente lo que quieres, sino lo que tu crees que quieres :-)

Porque llevando ese argumento al extremo, seria mucho mejor si hubiera
en todo momento solo un usuario conectado, no es asi? De esa manera el
resto no interferiria. Pero creo que no es realmente una salida
satisfactoria. Entonces mejor bloquear solo la tabla? Quizas siga
siendo insatisfactoria. Que tal bloquear solo el registro en cuestion?
Para eso podrias usar SELECT FOR UPDATE; pero mucho ojo con las
transacciones. Quizas lo que necesites sea userlocks. Pero si es un
sistema PHP o similar vas a tener muchos problemas para mantener a un
usuario dentro de una misma conexion ==> mas problemas.

Quizas lo que _realmente_ necesitas es que el programa sea mucho mas
inteligente y actue con cuidado al actualizar un registro, fijandose si
lo que va a sobreescribir es lo mismo que habia cuando el usuario empezo
a modificar el registro; si hay cambios, tiene que avisarle al usuario
para que haga un "merge".

--
Alvaro Herrera (<alvherre[a]surnet.cl>)
"Postgres is bloatware by design: it was built to house
PhD theses." (Joey Hellerstein, SIGMOD annual conference 2002)

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Manuel Sugawara 2005-05-11 15:39:52 Re: Funciones Postgres
Previous Message Oswaldo Hernández 2005-05-11 15:07:04 Re: Re-pregunta Hacer upper() y trim() automaticos