我在使用PostgreSQL的项目中遇到了问题。
假设有两个表A
和B
,A
和B
都有一个名为ID
的(唯一)字段。表ID
的{{1}}列被声明为主键,而表A
的{{1}}列被声明为指向表ID
的外键}。
我的问题是,每当我们将新数据输入数据库时,表B
中的值往往会在表A
之前更新(此问题无法避免,因为项目就是这样设计的)。所以我必须修改B
和A
之间的关系。
我的目标是实现在启用A
子句的同时将数据分别插入B
和A
的情况。而且,INSERT和DELETE查询可能同时发生。
有什么建议吗?
答案 0 :(得分:0)
如果你不能使用延迟约束,听起来你的项目设计很糟糕。您的基本问题是您无法保证数据的内部一致性,因为可能会发生不会将数据从一个一致状态移动到另一个状态的事务。
这是我要诚实地做的事情:
目录受影响的密钥。
删除受影响的键约束。
编写一个查找孤立行的定期作业。使用LEFT JOIN是因为反连接在PostgreSQL中表现不佳。
第三个表的问题是它无法解决您的基本问题,即写入不是原子级一致的。一旦你牺牲了很多你的交易控制就会消失。
长期来看,项目需要重写。