通常,如果要插入的值为NULL,则使用默认值。有没有办法告诉postgres它应该在空字符串('')上使用默认值?
答案 0 :(得分:6)
不,你不能直接这样做。
指定默认值的唯一有效方法是:
INSERT
列列表中省略该列;或DEFAULT
或INSERT
中的列明确指定关键字UPDATE
。 NULL
或''
都不是请求列默认值的有效方法。
如果您希望使用默认值替换NULL
或''
,则必须使用BEFORE ... FOR EACH ROW
触发器来执行此操作。
制作通用的并不是特别简单,因为在分配触发器中的DEFAULT
元组时,您无法使用NEW
关键字;您必须查找系统目录以获取默认表达式。
当然,如果你知道它,你可以随时重复触发器中的默认表达式,并且不介意编写特定于它的触发器。
总而言之,最好修复应用程序,使其符合标准,并且不希望数据库用默认值替换NULL
或''
。