我在触发器中有这个代码:
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
我不明白这种行为。这里发生了什么?
答案 0 :(得分:1)
https://www.postgresql.org/docs/current/static/citext.html
citext模块提供不区分大小写的字符串类型
...
citext通过将每个字符串转换为小写来执行比较 (好像叫低了)然后通常比较结果。 因此,例如,如果较低,则认为两个字符串相等 为他们产生相同的结果。
t=# select 'jack'<>'Jack';
?column?
----------
t
(1 row)
t=# select 'jack'::citext<>'Jack';
?column?
----------
f
(1 row)