比较触发器中作为hstore-data的列时弱点

时间:2019-01-17 14:05:15

标签: postgresql plpgsql database-trigger

在某些情况下,我想在UPDATE之前确保更改了哪些列。为了使其尽可能通用,我不想在函数中使用架构,表或列名称。我在SO和其他地方找到了一些解决方案,特别喜欢从answer

使用hstore的想法。

hstore的缺点,正如我广泛提到的那样,是因为我丢失了数据类型,所以一切都变得严格了。

但是在触发器的上下文中使用它(而没有像jsonhstore这样的复杂列),其中NEWOLD都具有与数据类型,我只能想到一个问题:NULL和空值将无法区分。

当我检测到触发功能的变化时,我可能还会遇到什么其他问题:

changes := hstore(NEW) - hstore(OLD);

替代方法似乎使用jsonb,然后编写一些jsonb_diff函数来发现更改。 hstore提供的内部减法运算似乎更健壮,但是也许我没有考虑所有弱点。

我正在使用Postgres 9.6。

0 个答案:

没有答案