Порядок управления обновлениями в спящем режиме

У меня есть таблица с уникальным столбцом, «токеном», на которую накладывается уникальное ограничение в базе данных. В определенном случае мне нужно изменить существующую строку, чтобы она имела тот же токен, что и другая существующая строка, 0; 'ааа' 1; 'bbb'

Я хочу, чтобы идентификатор 0 ('aaa') вместо токена 'bbb'. Поэтому мне нужно изменить «bbb» на «jfeisefjse», а затем я могу заменить «aaa» на «bbb». Это можно сделать в postgres за одну транзакцию.

Я попытался сделать то же самое в коде: в одной транзакции я получаю токен из существующей строки (строка 1), я устанавливаю его как случайное значение , Я обновляю другую строку (строка 0), чтобы она содержала токен строки 1, а затем фиксирую. Однако спящий режим не соблюдает порядок, в котором я выполнял коммиты. Кажется, всегда сначала запускается оператор обновления для строки 0, и postgres жалуется, что он нарушает ограничение внешнего ключа.

Как я могу заставить спящий режим делать это ? Либо принудительно установить определенный порядок операторов обновления, либо сделать это другим способом?

Примечание: Выполнение этого в двух транзакциях (одна для скремблирования строки 1, затем другая транзакция для обновления строки 0) не является вариантом.

6
задан John Smith 29 May 2011 в 01:49
поделиться