簡體   English   中英

使用PostgreSQL更新多個表中的主鍵

[英]Update primary keys in multiple tables using PostgreSQL

我在PostgreSQL的單個模式中有11個表。 每個表都有一個名為“ id”的列,該列應該是唯一的主鍵。 不幸的是,某些表的ID在其他表中。

如何創建新序列並使用完全唯一的值更新所有表的ID值? 我必須一次做一個序列和一張桌子嗎?

我是SQL的新手,所以除了創建序列和更新單個表之外,我不知道從哪里開始。

您的問題有點含糊,但我認為您的id是int / bigint類型的。 並且您希望這些“ id”不僅在一個表中具有全局唯一性。

可能有很多選擇。 這是最簡單但可能不是最優雅的方法之一。 首先創建一個提供ID的序列,例如:

CREATE SEQUENCE globally_unique_id;

然后只需遍歷所有11個表進行更新,例如:

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

使用此一個序列將不會為您所有表中的任何行提供相同的ID。

如果在“ id”列的其他表中有未在更新時聲明為級聯的外鍵約束,則麻煩會更大。 但這是另一個故事。

當然,您無需逐表進行操作。 例如,您可以查詢的Postgres系統表的所有表-就像問在這里 - (或使手表名稱的數組)和環路表用的ID在一些特殊構造的查詢或過程。

但是我認為:“僅” 11個表可能不值得對其進行編碼。 另一方面,如果以后需要再次執行相同的操作,則可能會很有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM