我有一个可以从多个工作人员更新的数组,如下所示
UPDATE my_table SET arr = array_append(my_table.arr, element)
:
当两个工作人员尝试同时更新数组时,就会出现问题。例如,两个工人都看到在更新的那一刻,数组是空的,并尝试如下追加一个元素:
array_append(empty_arr, element_a)
和array_append(empty_arr, element_b)
。最后,数组的最终内容将是:arr[element_a]
或者arr[element_b]
因为其中一个工作人员将更早完成对数组的更新,并且它的值将被另一个工作人员的值覆盖。如何确保两个值都写入数组:arr[element_a, element_b]
?
你不需要做任何事情,因为这种异常不会在 PostgreSQL 中发生。
当第二个事务获得该行的锁时,它将重新读取它并查看第一个事务修改的值。
有关详细信息,请参阅文档。