не отпускается пока не будет завершена транзакция
.UPDATE 1, 3
и UPDATE 3, 1
. Если сортировка будет, то уже не важно какие кортежи захотят изменять, т.к. кто-то один но сможет взять все блокировки:ON CONFLICT .. SET ...
- это никак не влияет на приобретение блокировок
, это про конфликты нарушения ограничений. Скорее всего, ты имел ввиду SKIP LOCKED - он позволяет избежать этих дедлоков тем, что не берет блокировки. Но (!!) он только для SELECT, но не INSERT.
Скомпилировал у себя (ubuntu 24.04) с помощью g++ (14.1.0 и 13.2.0) и clang++ (18.1.3 и 18.1.8) - ошибок не было, строка выводилась.
Видимо, очень специфичное окружение стоит