使用PostgreSQL更新多个表中的主键

时间:2018-11-15 00:36:11

标签: postgresql

我在PostgreSQL的单个模式中有11个表。每个表都有一个名为“ id”的列,该列应该是唯一的主键。不幸的是,某些表的ID在其他表中。

如何创建新序列并使用完全唯一的值更新所有表的ID值?我必须一次完成一个序列和一张表格吗?

我是SQL的新手,所以除了创建序列和更新单个表之外,我不知道从哪里开始。

1 个答案:

答案 0 :(得分:1)

您的问题有点含糊,但我认为您的id的类型为int / bigint。而且您希望这些“ id”不仅在一个表中具有全局唯一性。

可能有很多选择。这是最简单但可能不是最优雅的方法之一。首先创建一个提供ID的序列,例如:

CREATE SEQUENCE globally_unique_id;

然后只需更新所有11个表,例如:

UPDATE table1 SET id = nextval('globally_unique_id');

使用此序列不会为您提供所有表中任何行的相同ID。

如果在“ id”列的其他表中有未声明在更新时级联的外键约束,则麻烦更大。但这是另一个故事。

当然,您无需逐表进行操作。例如,您可以查询Postgres系统表中的所有表(如询问的here)(或手动创建表名数组),并在某些特殊构造的查询或过程中循环查找具有id的表。

但是我认为:“仅” 11个表可能不值得对其进行编码。另一方面,如果以后需要再次执行相同的操作,则可能会很有用。