- 締切済み
UPDATE文の更新順序について
環境はPostgreSQL 9.0です。 id(char(1)) number(integer) 1 1 2 2 3 3 っていうテーブルがあって、numberにUNIQUE制約が掛かっています。 一回のupdate文でnumを1ずつ増やしたいんですが、更新順序の指定 ってどうやるんですか? UPDATE table SET number = number+1 だと重複違反になるから、numberが大きい奴から更新したいんですよね。 誰か教えてくれませんか?
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- gacky-79
- ベストアンサー率100% (14/14)
回答No.2
PostgreSQL 9.0 であれば、UNIQUE制約に遅延設定をするのはいかがでしょう? ALTER TABLE ... ADD { UNIQUE | PRIMARY KEY } (...) DEFERRABLE
- tomtomtrain
- ベストアンサー率18% (11/60)
回答No.1
次の1か2で実現できると思います。 方法1 ・UNIQUE制約を外す ・numを1加算する ・再度UNIQUE制約を設定する 方法2 ・コピーテーブルを作成する(テーブル名以外は、元テーブルと全く同じ)。 ・以下のSQLで元テーブルのレコードをコピーテーブルにコピーする INSERT INTO コピーテーブル SELECT * FROM 元テーブル ・元テーブルのレコードを全件削除する ・コピーテーブルのnumに1加算して元テーブルにレコードをコピーする INSERT INTO 元テーブル SELECT id, number + 1 number FROM コピーテーブル ORDER BY number DESC