0

テキストフィールドバーが含まれるテーブルfooがあります。そのテーブルには、基本的に次の更新後トリガーがあります。


CREATE OR REPLACE FUNCTION update_foo() 
RETURNS TRIGGER
SECURITY DEFINER
AS
$_$
DECLARE 
BEGIN
  IF TG_OP = 'UPDATE' and NEW.bar = OLD.bar THEN
    return NEW;
  END IF;

  /* Do some stuff */

END
$_$
LANGUAGE PLPGSQL;

それから私はこのようなことをします: Update foo set bar = bar || '';

ただし、テキスト値が等しい場合は保釈されません。

私の質問は、なぜPostgreSQL 8.3、特にpl / PgSQLがそれらを同等と呼び、早期に救済しないのかということです。

免責事項:テーブル、フィールド、および変数の名前は、オンラインで投稿できるように元の名前から変更されました。

4

1 に答える 1

3

これは、値の1つがnullであるためです。また、nullを他の値と等しくすることはできません。

したがって、追加の基準を追加する必要があります

(New.bar is  null or Old.bar is null)

または

  NEW.bar is not distinct from OLD.bar
于 2012-04-26T23:02:26.027 に答える