私は2つのフィールド、lane_idと位置に一意のインデックスを持つテーブルを持っています。PostgreSQL:一意のインデックスを持つ一括更新
は今、私はこのクエリを使用して行を更新したい:私は、複数のチケットをお持ちの場合
duplicate key value violates unique constraint "teams_ticket_position_bfcce9fa_uniq"
:
UPDATE "teams_ticket" SET "position" = ("teams_ticket"."position" + 1) WHERE ("teams_ticket"."lane_id" = 1 AND "teams_ticket"."position" >= 0)
で終わるどの。
どうすればこの問題を解決できますか?
スキーマによって異なります。増分している値に固有のキー制約があるように思えますが、これは修正を開始するのに適しています。 – Makoto
@Makotoはい、私は知っています。私はインデックスを持っています(チケットの最初の行を見てください)。問題は、すべてのチケットを1つのポジションだけシフトすると、有効な状況に終わるはずです(すべてのlane_id - ポジションのペアはまだ一意です)。しかし、彼らは1つずつ移動してインデックスが失敗しているように見えます。私はこの問題を解決する正しい方法が何か不思議です。 – marxin
ここには 'deferrable'が必要です。 – wildplasser