アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

A 回答 (2件)

PostgreSQL 9.0 であれば、UNIQUE制約に遅延設定をするのはいかがでしょう?



ALTER TABLE ... ADD { UNIQUE | PRIMARY KEY } (...) DEFERRABLE

参考URL:http://lets.postgresql.jp/documents/technical/9. …
    • good
    • 0

次の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
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す