IS DISTINCT FROM
如果我们想要比对两个值是否变动,null在比较的时候会出现问题,需要多加判断,这个时候可以使用IS DISTINCT FROM。
它是一个更安全的 “不等于” 判断,和 <> 类似,但更严谨,能正确处理 NULL 的比较。
NULL IS DISTINCT FROM NULL → false
NULL IS DISTINCT FROM 'abc' → true
'abc' IS DISTINCT FROM 'abc' → false
'abc' IS DISTINCT FROM 'xyz' → true
这个用法在MySQL和SQLserver是无法使用的。
不等于和IS DISTINCT FROM效率几乎一致,可以自行判断使用什么语法。
表字段删除问题
如果我们对表的字段进行删除操作,比如:
ALTER TABLE your_table DROP COLUMN some_column;
这个字段 并不会从系统表中真正“删除”,而是在pg_attribute表中打个标记 attisdropped = true,意思是:“这个字段逻辑上被删了,但元信息还在”。
目的如下:
- 保持表的物理布局兼容性(比如不影响列的偏移顺序)
- 支持某些旧的 row 数据格式向前兼容
- 避免立即破坏依赖的视图、函数等
