PostgreSQL - 需要首先更新具有外键列的表

时间:2013-06-19 21:14:09

标签: database postgresql

我在使用PostgreSQL的项目中遇到了问题。

假设有两个表ABAB都有一个名为ID的(唯一)字段。表ID的{​​{1}}列被声明为主键,而表A的{​​{1}}列被声明为指向表ID的外键}。

我的问题是,每当我们将新数据输入数据库时​​,表B中的值往往会在表A之前更新(此问题无法避免,因为项目就是这样设计的)。所以我必须修改BA之间的关系。

我的目标是实现在启用A子句的同时将数据分别插入BA的情况。而且,INSERT和DELETE查询可能同时发生。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

如果你不能使用延迟约束,听起来你的项目设计很糟糕。您的基本问题是您无法保证数据的内部一致性,因为可能会发生不会将数据从一个一致状态移动到另一个状态的事务。

这是我要诚实地做的事情:

  1. 目录受影响的密钥。

  2. 删除受影响的键约束。

  3. 编写一个查找孤立行的定期作业。使用LEFT JOIN是因为反连接在PostgreSQL中表现不佳。

  4. 第三个表的问题是它无法解决您的基本问题,即写入不是原子级一致的。一旦你牺牲了很多你的交易控制就会消失。

    长期来看,项目需要重写。