我试图找出达到某种限制的最佳方法。约束条件是,如果列中已经存在一个非null值,我需要防止它被null值更新。它应该仍然可以接受非空的更新。如果在已经存在非null值的列上针对该约束运行null更新,我需要防止这种情况
示例->
列名:lname
> t0: Lname = NULL
> t1: update Lname - > Dracula (ALLOWED)
> t2: update Lname - > daniel (ALLOWED)
> t3: update Lname - > NULL (DISALLOW THIS)
> t4: Final state Lname -> daniel (FINAL STATE)
我可以考虑通过编程的方式从db中获取行,并将当前值与传入值进行比较。但我想知道是否有更好的解决办法。
notnull约束将不起作用,因为当第一次创建行时,它可以在这些列中携带null值。
当前正在使用带有typeorm的postgres。
如果您有任何想法/建议,我们将不胜感激!
2条答案
按热度按时间hgtggwj01#
你不能用约束来做。
最好的办法就是扣动扳机。可能是这样的:
您也可以为它提供一个通用的触发器函数,但是它会很复杂,而且性能可能不会那么好。
pzfprimi2#
另一个可能的选择是编写一个plpgsql过程来执行更新,并强制应用程序使用该过程。您可以从应用程序用户撤消对表的更新,因此更新表的唯一方法是通过以下过程。