[pgsql-jp: 33452] (無題)

MINOURA minoura @ wplanning.co.jp
2004年 7月 1日 (木) 14:11:20 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 メーリングリストの案内