Duas instruções DELETE concorrentes, mas idênticas, podem causar um impasse?
Presumirsome_table
tem duas linhas, com chave primária1
e2
. A seguinte sequência de instruções pode causar um conflito:
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;
O impasse não teria ocorrido se as duas sessões fossem excluídas na mesma ordem.
Agora, voltando à minha pergunta, o que acontece se a instrução DELETE tocar várias linhas? Por exemplo:
session 1: begin;
session 2: begin;
session 1: DELETE FROM my_table;
session 2: DELETE FROM my_table;
É possível que duas instruções DELETE concorrentes, mas idênticas, excluam linhas em uma ordem diferente? É possível impor a ordem de exclusão para evitar um conflito?
Como não encontrei essas informações na documentação, diria que a ordem de exclusão não é garantida (embora possa ser indiretamente como um detalhe de implementação). Eu queria checar aqui.