не отпускается пока не будет завершена транзакция.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) - ошибок не было, строка выводилась.
Видимо, очень специфичное окружение стоит