[pgsql-jp: 33453] RULEにおけるNEWについて

MINOURA minoura @ wplanning.co.jp
2004年 7月 1日 (木) 14:15:15 JST


みのと申します。
すいません。先ほど送ったメールに件名をつけ忘れました。
二重の投稿になりますがお許しください。

ルールにおけるNEWの使い方で、よくわからないところがあるので質問させてください。
CREATE TABLE members(
     code SERIAL PRIMARY KEY,
     name TEXT,
     nickname TEXT
);
というテーブルがあったとします。
やりたいことは、
(1)レコード登録時に'name', 'nickname' 両フィールドに値が入った場合はそのまま。
       INSERT INTO members (name, nickname) VALUES ('foo', 'bar');
-->'nickname'に'bar'が入る。
(2)'name' フィールドにしか値が入らなかったときは'nickname' フィールドにも'name' と同じ値を格納する。
です。
       INSERT INTO members (name) VALUES ('foo');
-->'nickname'にも'foo'が入る。


そこでこんなRULEを作ってみました。
CREATE RULE setNickname AS ON INSERT TO members
     DO UPDATE members SET nickname =
     CASE
        WHEN NEW.nickname IS NULL THEN
           NEW.name
        ELSE
           NEW.nickname
     END
     WHERE code = NEW.code;         --今INSERTされたレコードを検索しているつもり。

しかし、最後のWHERE句がまずいようで、やりたいことが実現できません。
代わりに"WHERE nickname IS NULL" にしてやると思った通りのUPDATEが実行されますが、
これではちょっと乱暴な気がします。
上記のWHERE句のどこがいけないのでしょうか?
よろしくお願いします。




pgsql-jp メーリングリストの案内