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

24 浏览
0 Comments

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

我在PostgreSQL中的一个模式中有11个表。每个表都有一个名为'id'的列,应该是一个唯一的主键。不幸的是,一些表的id在其他表中也存在。

我该如何创建一个新的序列并使用完全唯一的值来更新所有表的id值?我是否需要逐个地处理序列和表?

我对SQL还很陌生,所以除了创建序列和更新单个表之外,我不知道从哪里开始。

0
0 Comments

问题的原因是希望将多个表中的主键更新为全局唯一的值。解决方法是创建一个序列,然后通过循环更新每个表的主键。

首先,创建一个用于提供唯一id的序列:

CREATE SEQUENCE globally_unique_id;

然后,通过循环更新每个表的主键:

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

使用这个序列可以确保所有表中的行都具有不同的id。

如果其他表对'id'列有外键约束,并且没有声明级联更新约束,那么问题可能会更复杂。但这是另一个故事了。

当然,你不需要逐个表进行更新。你可以查询Postgres系统表获取所有表的名称,然后在某个特殊构造的查询或过程中循环处理这些表的主键。

但在我看来,只有11个表可能不值得编写这个逻辑。另一方面,如果将来需要再次进行相同的操作,这个方法可能会很有用。

0