• 締切済み

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が大きい奴から更新したいんですよね。 誰か教えてくれませんか?

みんなの回答

  • gacky-79
  • ベストアンサー率100% (14/14)
回答No.2

PostgreSQL 9.0 であれば、UNIQUE制約に遅延設定をするのはいかがでしょう? ALTER TABLE ... ADD { UNIQUE | PRIMARY KEY } (...) DEFERRABLE

参考URL:
http://lets.postgresql.jp/documents/technical/9.0/1#sql
回答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

関連するQ&A