Bloqueos y tablas

Postgres ofrece varios modos de bloqueo para controlar el acceso concurrente a los datos en tablas. Algunos de estos modos de bloqueo los adquiere Postgres autom�ticamente antes de la ejecuci�n de una declaraci�n, mientras que otros son proporcionados para ser usados por las aplicaciones. Todos los modos de bloqueo (excepto para AccessShareLock) adquiridos en un transacci�n se mantienen hasta la duraci�n de la transacci�n.

Adem�s de bloqueos, tambi�n se usa compartici�n en exclusiva para controlar acessos de lectura/escritura a las p�ginas de tablas en un buffer compartido. Este m�todo se pone en marcha inmediatamente despu�s de que un tuplo es tra�do o actualizado.

Bloqueos a nivel de tabla

AccessShareLock

Un modo de bloqueo adquirido autom�ticamente sobre tablas que est�n siendo consultadas. Postgres libera estos bloqueos despu�s de que se haya ejecutado una declaraci�n.

Conflictos con AccessExclusiveLock.

RowShareLock

Adquirido por SELECT FOR UPDATE y LOCK TABLE para declaraciones IN ROW SHARE MODE.

Entra en conflictos con los modos ExclusiveLock y AccessExclusiveLock.

RowExclusiveLock

Lo adquieren UPDATE, DELETE, INSERT y LOCK TABLE para declaraciones IN ROW EXCLUSIVE MODE.

Choca con los modos ShareLock, ShareRowExclusiveLock, ExclusiveLock y AccessExclusiveLock.

ShareLock

Lo adquieren CREATE INDEX y LOCK TABLE para declaraciones IN SHARE MODE.

Est� en conflicto con los modos RowExclusiveLock, ShareRowExclusiveLock, ExclusiveLock y AccessExclusiveLock.

ShareRowExclusiveLock

Lo toma LOCK TABLE para declaraciones IN SHARE ROW EXCLUSIVE MODE.

Est� en conflicto con los modos RowExclusiveLock, ShareLock, ShareRowExclusiveLock, ExclusiveLock y AccessExclusiveLock.

ExclusiveLock

Lo toma LOCK TABLE para declaraciones IN EXCLUSIVE MODE.

Entra en conflicto con los modos RowShareLock, RowExclusiveLock, ShareLock, ShareRowExclusiveLock, ExclusiveLock y AccessExclusiveLock.

AccessExclusiveLock

Lo toman ALTER TABLE, DROP TABLE, VACUUM y LOCK TABLE.

Choca con RowShareLock, RowExclusiveLock, ShareLock, ShareRowExclusiveLock, ExclusiveLock y AccessExclusiveLock.

Nota

S�lo AccessExclusiveLock bloquea la declaraci�n SELECT (sin FOR UPDATE).

Bloqueos a nivel de fila

Este tipo de bloqueos se producen cuando campos internos de una fila son actualizados (o borrados o marcados para ser actualizados). Postgres no retiene en memoria ninguna informaci�n sobre filas modificadas y de este modo no tiene l�mites para el n�mero de filas bloqueadas sin incremento de bloqueo.

Sin embargo, tenga en cuenta que SELECT FOR UPDATE modificar� las filas seleccionadas marc�ndolas, de tal modo que se escribir�n en el disco.

Los bloqueos a nivel de fila no afecta a los datos consultados. Estos son usados para bloquear escrituras a la misma fila �nicamente.