を与えるIがトリガーでこのコードを持っている:PosgreSQL 9.3オペレータ<> doesntの論理結果を
CREATE TRIGGER customernametrig
AFTER UPDATE
ON customers
FOR EACH ROW
EXECUTE PROCEDURE trig();
と機能:
CREATE OR REPLACE FUNCTION trig()
RETURNS trigger AS
$BODY$
begin
if TG_OP='UPDATE' then
RAISE NOTICE '%', new.customername;
RAISE NOTICE '%', old.customername;
RAISE NOTICE '%', new.customername<>old.customername;
if new.customername<>old.customername then
RAISE NOTICE 'hi';
end if;
end if;
end;
$BODY$
LANGUAGE plpgsql VOLATILE
customername
列が型citextです。
私はそれが印刷さ
Update customers set customername='Jack' where customerid=125;
フィールドupdateコマンドを実行します。だから私はそれを印刷することを期待何ですかt
を:
NOTICE: Jack
NOTICE: jack
NOTICE: f
しかし、私はselect 'jack'<>'Jack'
を実行する場合、それは私に与えます:
NOTICE: Jack
NOTICE: jack
NOTICE: t
NOTICE: hi
この現象はわかりません。ここで何が起きてるの?
あなたはおそらくNULL's 'について混乱していると、おそらく'明確なfrom'の代わりに、 '<>'で使用する必要があります。 –
@ GordonLinoffここにはnullはありません。私はこの特定のcomparsionジャックについてジャックで質問しています: "非NULL入力の場合、IS DISTINCT FROMは<>演算子と同じです。"待ち受け画面からhttps://www.postgresql.org/docs/9.0/static/functions-comparison.html – avi
を削除して、BEFORE UPDATEトリガーを追加し、同じかどうかを確認してください。 –