我在StackOverflow上发现了一百万听起来有点相似的东西,但不是我的情况。我将尽可能地简化:
我有如下两张表:
CREATE TABLE B (id uuid PRIMARY KEY);
CREATE TABLE A (id uuid PRIMARY KEY, b_id uuid REFERENCES b);
A.b_id
中有一些NULL
的值。我正在尝试创建一个执行以下操作的迁移:
对于A
中没有b_id
的每一行,在B
中新建一行,并将id
赋值给A.b_id
。
我如何在一个查询中完成这个?
假设您希望b
中每一行都有一个不同的条目,而a
中缺少UUID:
WITH upd AS (
UPDATE a
SET b_id = gen_random_uuid()
WHERE b_id IS NULL
RETURNING b_id
)
INSERT INTO b (id)
SELECT b_id FROM upd;
db<此处小提琴>此处小提琴>
这个可以工作,因为它是一个单个命令,并且FK引用仅在命令末尾强制执行。
:
- SET CONSTRAINTS ALL DEFERRED不按预期工作
- 约束定义的DEFERRED最初的IMMEDIATE仍然被延迟?