Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

447
Vistas
postgres: bloqueo de datos de fila usando python

Tengo una tabla db postgres (PostgreSQL 12.3) que consta de 100k filas y tengo un script de python que lee de esta tabla y realiza alguna acción basada en los datos. Quiero ejecutar el mismo script en varias máquinas para que los datos se puedan procesar más rápido. Pero cuando ejecuto desde varias máquinas, quiero asegurarme de que una fila sea procesada por una sola máquina a la vez, básicamente al bloquear esa fila.

¿Puede proporcionar algunos consejos sobre cómo se puede lograr la fila de bloqueo a través de python? Estoy usando el módulo psycopg2 para leer y actualizar datos de la tabla, pero no encontré una forma de bloquear los datos de la fila.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Use SELECT ... FOR UPDATE SKIP LOCKED , que realiza un bloqueo de nivel de fila en cualquier fila que se devuelva y omite las filas que ya están bloqueadas por otra transacción.

Sesión 1:

 testdb=# create table tt(x text); CREATE TABLE testdb=# insert into tt select 'foo'; INSERT 0 1 testdb=# insert into tt select 'bar'; INSERT 0 1 testdb=# BEGIN; BEGIN testdb=# SELECT * FROM tt ORDER BY x LIMIT 1 FOR UPDATE SKIP LOCKED; x ----- bar (1 row) testdb=# -- SELECT in session 2 is performed now. testdb=# commit; COMMIT

Sesión 2:

 testdb=# BEGIN; BEGIN testdb=# SELECT * FROM tt ORDER BY x LIMIT 1 FOR UPDATE SKIP LOCKED; x ----- foo (1 row) testdb=# commit; COMMIT

No necesitará hacer nada especial con psycopg2 para esto, siempre que su consulta ya tenga un límite razonablemente pequeño (para que SELECT no bloquee todas las filas), agregar FOR UPDATE SKIP LOCKED debería hacer lo que está pidiendo . Consulte los documentos sobre la cláusula de bloqueo para obtener más detalles.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda