sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Significa ACTUALIZAR DONDE el valor está EN la subconsulta que tiene GROUP BY, por lo que no hay problemas de condición de carrera?

¿Qué tal una capa de subconsulta adicional para el bloqueo?

   UPDATE my_table
      SET processing_by = our_id_info -- unique to this instance
    WHERE trans_nbr IN (
                    SELECT trans_nbr
                      FROM my_table
                     WHERE trans_nbr IN (
                                 SELECT trans_nbr
                                   FROM my_table
                               GROUP BY trans_nbr
                                 HAVING COUNT(trans_nbr) > 1
                                  LIMIT our_limit_to_have_single_process_grab
                                 )
                        FOR UPDATE
                       )
RETURNING row_id