¿ACTUALIZAR sin la cláusula WHERE bloquea una tabla en PostgreSQL?

9

¿La tabla completa UPDATE(sin WHEREcláusula específica ) bloquea una tabla en PostgreSQL? Por ejemplo, ¿evita que las filas se eliminen / inserten?

Por ejemplo, si ejecuto UPDATE t1 SET key = 'value' ¿Puedo esperar que no se inserten nuevas filas t1durante la UPDATEejecución?

Si no, ¿puedo esperar que UPDATEse actualicen incluso las filas que aparecieron después de su inicio? (la clave no tiene DEFAULT 'value'en su definición)

origaminal
fuente
Si estaba actualizando filas que se insertaron después de que comenzó y hubo un proceso que estaba insertando filas continuamente, ¿eso no significaría que la declaración de actualización nunca terminaría?
Joe W
¡buen punto! Sí, apenas se UPDATEpuede implementar de tal manera para actualizar las filas recién insertadas.
origaminal
No, solo las filas que se han cambiado se bloquearán. Una ACTUALIZACIÓN nunca bloquea toda la mesa.
a_horse_with_no_name

Respuestas:

15

Una ACTUALIZACIÓN sin una cláusula WHERE bloqueará todas las filas de la tabla, pero no bloqueará la tabla en sí para DML.

Las filas no se pueden eliminar de una transacción diferente porque están bloqueadas.

Pero puede insertar nuevas filas sin problemas (suponiendo que no violen ninguna restricción).

La fila UPDATE no verá ninguna fila que se inserte después de la ACTUALIZACIÓN y, por lo tanto, no se cambiará.

un caballo sin nombre
fuente
¿Puedes compartir los enlaces en los documentos? No encontré mucho en la documentación oficial que diga exactamente sobre UPDATEsin WHERE.
origaminal
Y las filas ACTUALIZADAS de otra transacción también fallarán debido a los bloqueos de fila, ¿correcto?
tale852150
1
@origaminal El documento en cuestión está en postgresql.org/docs/current/explicit-locking.html , los últimos cuatro son lo que está llamando 'bloqueos de tabla', aunque incluso los bloqueos permisivos siguen siendo una forma de bloqueo de tabla que evitar intentos de tomar un bloqueo exclusivo.
SilverbackNet