在某些情况下,我想在UPDATE
之前确保更改了哪些列。为了使其尽可能通用,我不想在函数中使用架构,表或列名称。我在SO和其他地方找到了一些解决方案,特别喜欢从answer
hstore
的想法。
hstore
的缺点,正如我广泛提到的那样,是因为我丢失了数据类型,所以一切都变得严格了。
但是在触发器的上下文中使用它(而没有像json
或hstore
这样的复杂列),其中NEW
和OLD
都具有与数据类型,我只能想到一个问题:NULL和空值将无法区分。
当我检测到触发功能的变化时,我可能还会遇到什么其他问题:
changes := hstore(NEW) - hstore(OLD);
替代方法似乎使用jsonb
,然后编写一些jsonb_diff
函数来发现更改。 hstore
提供的内部减法运算似乎更健壮,但是也许我没有考虑所有弱点。
我正在使用Postgres 9.6。