plpgsqlで論理式を計算する興味深い機能

全文索引を作成する際に問題が発生しました。 タイプts_vectorのftsフィールドがインデックス付きテーブルに作成されました。 必要に応じて、トリガーを挿入および更新するときに、ftsフィールドを更新する必要があります。 関連しないフィールドを更新するときにフルテキストインデックスが更新されないように、次の条件が確立されました。



 IF (TG_OP = 'UPDATE') AND (NEW."name" = OLD."name") THEN RETURN NEW; END IF; 
      





IF (TG_OP = 'UPDATE') AND (NEW."name" = OLD."name") THEN RETURN NEW; END IF;





つまり 名前が更新されていない場合、何も変更せずに、トリガーの実行を終了します。 しかし、このトリガーを更新すると、「古いレコードがまだ割り当てられていません」というエラーが発生しました。 ただし、この設計ではエラーは発生しません。



 IF (TG_OP = 'UPDATE') THEN IF (NEW."name" = OLD."name") THEN RETURN NEW; END IF; END IF; 
      





IF (TG_OP = 'UPDATE') THEN IF (NEW."name" = OLD."name") THEN RETURN NEW; END IF; END IF;





したがって、論理式を計算するとき、その各コンポーネントが計算されます。 また、TG_OP!= 'UPDATE'(INSERTが実行されることを意味する)であっても、OLDが定義されていない2番目の条件がチェックされます。 したがって、エラー。



All Articles