Postgresql

如何在沒有自動增量 ID 衝突的情況下在 2 個 PostgreSQL 集群之間遷移數據?

  • April 20, 2022

我有 2 個獨立執行的數據庫集群。將來,我可能需要將客戶的記錄從集群 1 移動到集群 2。我有一個 bash 腳本,我在伺服器端將表記錄從集群 1 複製到 CSV 文件,然後將它們恢復到集群 2。

數據之間的關聯使用順序 ID。這些 ID 在兩個實例中不是唯一的。似乎有兩種可能:

  1. 我沒有為我的案例使用最好的工具。還有其他工具可以讓我更輕鬆地做到這一點。我已經掩蓋了外國數據包裝器。我不想做轉儲,因為我只需要一些記錄。
  2. 我只需要吸收它並使用在我的數據集中唯一的 UUID。

這是選項 2。

要跨獨立數據庫獲取唯一標識符,請使用 UUID。

否則,您需要COPY TO暫存表並使用複雜的 SQL 腳本,以在發生衝突的情況下將新分配的序列號傳播到其他表中的所有相關行,同時插入目標表。您可能必須跟踪從舊序列號到新序列號的每次翻譯,以備將來導入。

要合併它們,您需要更改數字,以免它們發生衝突。

例如:在一個數據庫上,您可以將所有 id 加倍,而在另一個數據庫上將它們全部加倍並添加一個。

引用自:https://dba.stackexchange.com/questions/311124