我有這樣的代碼在觸發器:PosgreSQL 9.3操作者<>犯規給予邏輯結果
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;
領域它打印:
NOTICE: Jack
NOTICE: jack
NOTICE: f
但是,如果我跑select 'jack'<>'Jack'
它給了我:t
因此,我希望它打印的是:
NOTICE: Jack
NOTICE: jack
NOTICE: t
NOTICE: hi
我不明白這種行爲。這裏發生了什麼?
你可能感到困惑'NULL's,而且也應該使用'是不同的from',而不是'<>'。 –
@GordonLinoff這裏沒有空位。我用傑克問這個具體的比較傑克:「對於非空輸入,IS DISTINCT FROM與<>運算符相同。」 https://www.postgresql.org/docs/9.0/static/functions-comparison.html – avi
out of curiocuty,添加BEFORE UPDATE觸發器並檢查相同嗎? –