我想更改一个主键和所有引用该值的表行。
# table master
master_id|name
===============
foo|bar
# table detail
detail_id|master_id|name
========================
1234|foo|blu
如果我给一个脚本或函数
table=master, value-old=foo, value-new=abc
我想创建一个 SQL 片段,对所有引用表“master”的表执行更新:
update detail set master_id=value-new where master_id=value-new;
.....
在内省(introspection)的帮助下,这应该是可能的。
我用的是 postgres。
更新
问题是,有许多表具有表“master”的外键。我想要一种方法来自动更新所有具有主表外键的表。
最佳答案
到目前为止,处理主键更改的最简单方法是ALTER
您的引用外键约束为ON UPDATE CASCADE
。
然后您可以自由更新主键值,并且更改将级联到子表。由于所有随机 I/O,这可能是一个非常缓慢的过程,但它会起作用。
在此过程中,您需要注意不要违反主键列的唯一性约束。
一个更简单但更快的方法是为新的 PK 添加一个新的 UNIQUE
列,填充它,向所有指向新 PK 的引用表添加新列,删除旧的 FK 约束和列,然后最后放弃旧的 PK。
关于sql - 生成 SQL 以更新主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18271622/