IBM PureData System for Analytics, Version 7.1

LOCK TABLE

Utilice el comando LOCK TABLE para bloquear una tabla en la base de datos actual. La modalidad de bloqueo especifica el tipo de bloqueo que se va a adquirir.

El comando LOCK TABLE tiene éxito cuando se puede adquirir un bloqueo de la modalidad especificada en la tabla. El comando esperará todo lo necesario para obtener el bloqueo, a menos que se especifique la opción NOWAIT, que hace que el comando anule la transacción si no puede adquirir el bloqueo inmediatamente.

Un bloqueo se mantiene hasta que se confirma la transacción o se anula. Si se emite LOCK TABLE implícitamente (es decir, no es un par BEGIN/COMMIT), el comando adquiere el bloqueo cuando se permite y, a continuación, se libera el bloqueo inmediatamente ya que el comando era una transacción de una sola sentencia que se confirma implícitamente cuando se completa el comando.

Cuando sea posible, los comandos LOCK TABLE deben emitirse antes de cualquier consulta en la transacción. La adquisición de un bloqueo después de emitir una consulta en las tablas de usuario no protege necesariamente a una transacción de errores de serialización.

Si planea emitir comandos LOCK TABLE para varias tablas de una transacción, emita los comandos en el orden establecido por la aplicación. Esto minimiza la posibilidad de punto muerto. Cuando se produce un punto muerto, Postgres anula una de las transacciones implicadas en el punto muerto.

Conflictos de la modalidad de bloqueo

La tabla siguiente muestra la matriz de conflictos de bloqueo; es decir, qué bloqueos pueden bloquear otros tipos de bloqueos. Una modalidad de bloqueo entra en conflicto con otra modalidad si no se puede otorgar ningún bloqueo a una transacción cuando otra transacción retiene el bloqueo opuesto en la misma tabla. Los bloqueos retenidos en la misma transacción no entran en conflicto unos con otros; una transacción puede retener bloqueos de varias modalidades en una misma tabla. Si se han de adquirir varios bloqueos en la misma tabla, solicite primero los bloqueos más fuertes para minimizar la posibilidad de que haya un punto muerto. Si una transacción necesita dos bloqueos para la misma tabla y ninguno debe ser más fuerte que el otro (en particular, SHARE y ROW EXCLUSIVE), piense en emplear una modalidad de bloqueo que subsume ambas, como SHARE ROW EXCLUSIVE.

Tabla 1. Matriz de compatibilidad de bloqueo
  Unidad compartida de acceso Unidad compartida de fila Fila exclusiva Unidad compartida Unidad compartida de fila exclusiva Exclusiva Acceso exclusivo
Unidad compartida de acceso Correcto Correcto Correcto Correcto Correcto Correcto Conflicto
Unidad compartida de fila Correcto Correcto Correcto Correcto Correcto Conflicto Conflicto
Fila exclusiva Correcto Correcto Correcto Conflicto Conflicto Conflicto Conflicto
Unidad compartida Correcto Correcto Conflicto Correcto Conflicto Conflicto Conflicto
Unidad compartida de fila exclusiva Correcto Correcto Conflicto Conflicto Conflicto Conflicto Conflicto
Exclusivo Correcto Conflicto Conflicto Conflicto Conflicto Conflicto Conflicto
Acceso exclusivo Conflicto Conflicto Conflicto Conflicto Conflicto Conflicto Conflicto

Sintaxis

Sintaxis para bloquear una tabla:
LOCK TABLE <table> in <lockmode> MODE [ NOWAIT ]

Entradas

El comando LOCK TABLE toma las siguientes entradas:

Tabla 2. Entradas de LOCK TABLE
Entrada Descripción
<table> Nombre de la tabla que se va a bloquear.
<lockmode> Tipo de bloqueo que adquirir en la tabla (consulte Tabla 3). La palabra ROW en una modalidad de bloqueo no implica un bloqueo en nivel de fila;.
NOWAIT El comando devolverá un error y anulará la transacción si no puede adquirir el bloqueo solicitado inmediatamente.
Tabla 3. Modalidades de bloqueo
Modalidad de bloqueo Adquirido por Privilegios necesarios Nota
ACCESS SHARE SELECT Select Esta es la modalidad de bloqueo más débil. Varias transacciones pueden retener esta clase de bloqueo en una tabla.
ROW SHARE   Insert, Delete o Update. Varias transacciones pueden retener esta clase de bloqueo en una tabla.
ROW EXCLUSIVE INSERT, DELETE y UPDATE Insert, Delete o Update. Varias transacciones pueden retener esta clase de bloqueo en una tabla.
SHARE CREATE MATERIALIZED VIEW y GENERATE STATISTICS Select o Genstats Varias transacciones pueden retener esta clase de bloqueo en una tabla.
SHARE ROW EXCLUSIVE   Insert, Delete o Update.  
EXCLUSIVE   Insert, Delete o Update.  
ACCESS EXCLUSIVE DROP TABLE, ALTER TABLE y TRUNCATE TABLE Drop, Alter o Truncate  

Salida

El comando LOCK TABLE tiene la siguiente salida:

Tabla 4. Salidas de LOCK TABLE
Salida Descripción
LOCK TABLE El comando se ha ejecutado correctamente.
NOTICE: LOCK TABLE issued after query against user tables Si se ha emitido un LOCK TABLE después de que la transacción ha emitido una consulta en las tablas de usuario, el sistema muestra un mensaje NOTICE y el comando tiene éxito cuando puede adquirir el bloqueo solicitado.

Privilegios

Es necesario ser el usuario administrativo, el propietario de la tabla o el propietario de la base de datos o del esquema donde se define la tabla, o la cuenta debe tener los privilegios de objeto adecuados, tal y como se describe en Tabla 3.

Uso

Se proporciona el siguiente uso de muestra.
LOCK TABLE customers IN ROW EXCLUSIVE MODE;


Feedback | Copyright IBM Corporation 2014 | Last updated: 2014-02-28