我有一个表A通过复合外键引用表B(我们使用具有复合键的Quartz) 当我想更新复合键时,我必须为两个表更新它,但是:
我总是认为我应该能够在交易中做到这一点,因为交易前后数据是一致的,但我无法在Postgres和H2上工作。
我对交易一致性的理解有什么不对?
答案 0 :(得分:0)
首先在B
中插入有效密钥。然后更新A
。最后删除B
中的无效密钥。
答案 1 :(得分:0)
您实际上需要为外键使用延迟约束。 您遇到的问题是因为Postgres将在每个语句之后而不是在事务完成之后检查外键约束。延迟约束允许您将约束检查推迟到事务结束之前。
当我遇到相同的问题时,这篇文章对我有所帮助,并且其中的示例与您的情况类似。读一读,您应该知道如何解决这个问题: https://begriffs.com/posts/2017-08-27-deferrable-sql-constraints.html