вызовет ошибку.

олагатьsome_table имеет два ряда с первичным ключом1 а также2, Следующая последовательность операторов может вызвать тупик:

session 1: begin;
session 2: begin;
session 1: DELETE FROM my_table WHERE my_key = 1;
session 2: DELETE FROM my_table WHERE my_key = 2;
session 1: DELETE FROM my_table WHERE my_key = 2;
session 2: DELETE FROM my_table WHERE my_key = 1;

Блокировка не возникла бы, если бы оба сеанса были удалены в одном и том же порядке.

Теперь, перейдя к моему вопросу, что произойдет, если оператор DELETE коснется нескольких строк? Например:

session 1: begin;
session 2: begin;
session 1: DELETE FROM my_table;
session 2: DELETE FROM my_table;

Возможно ли, что два параллельных, но идентичных оператора DELETE будут удалять строки в другом порядке? Можно ли применить порядок удаления, чтобы избежать тупика?

Я не смог найти эту информацию в документации, поэтому я бы сказал, что порядок удаления не гарантирован (хотя это может быть косвенно в качестве детали реализации). Я хотел перепроверить здесь.

Ответы на вопрос(1)

Ваш ответ на вопрос