2012-09-20 56 views
2

Jeffothers已經使我確信GUID比自動增加ID更可取。我有一個Postgres數據庫是由自動增量ID索引,所以我想「重構」索引到UUID。除了編寫遍歷表的函數之外,是否還有一些通用(或特定)方法來執行此操作,並檢查跨表的索引匹配?重構在** SQL DB中自動增加ID到GUID DB

更新

  • 注:該數據庫目前不生產,所以在性能和事務完整性是非問題。
+0

我想你必須編寫自己的自定義腳本才能完成此操作。根據您擁有多少表格,編寫和測試此腳本所花的時間可能會比在您的編輯器中手動進行更改花費更長的時間。 –

+1

手動更改每一行?我需要許多猴子來做到這一點。 –

+0

對於在我的評論中不明確,我表示歉意。我引用表計數作爲估計變化範圍的一種可能性。我沒有說行,記錄,元組或數據。我也不建議使用編輯器打開數據庫表格,並將數據更改爲電子表格。我在IDE中提到了編輯器,比如phpPgAdmin,Toad,SSMS等。 –

回答

2

我無法找到任何會自動爲您執行此操作的任何內容,因此看起來這取決於您的操作。世界仍然需要數據庫開發人員的好東西,呃?

可以說,最好的方法是將整個變化腳本化。創建該腳本的最佳方式可能是使用另一個腳本或工具(編寫代碼的代碼),這似乎不適用於此特定場景。當然,這些都增加了另一層必須構建和測試的軟件。如果我認爲我想重複這個過程一段時間,或者需要某種程度的審計跟蹤(例如更改腳本),我可能會咬緊牙關並編寫寫腳本的腳本。

如果這真的只是一次性交易,並且您可以在執行操作時阻止數據庫訪問,那麼只需手動進行更改可能會節省時間和精力,有點像您最初開發數據庫。通過這個,我的意思是通過你的首選方法(圖解者,SQL DDL等)添加UUID列,填充數據(可能使用臨時SQL DML),設置密鑰和約束,然後最終刪除舊的外鍵和列(再次,使用任何你喜歡的方法)。

如果您有多個環境(dev,test,prod),您可以在dev中執行此操作,然後使用數據庫比較工具對更改進行腳本編寫,但您需要腳本編寫新的FK值。

一個例子

這裏是一個working script example on SQL Fiddle,雖然這是在SQL Server(我最簡單的DB),只是給你一個想法約什麼你必須腳本(不幸的是,沒有如何)。它仍然不完全符合事務的一致性,因爲某人在某個特定操作中可以修改某些內容。

我意識到這不是一個完整的答案,所以隨時投我一票(並提供更好的答案)。

祝你好運,這實際上是一個有趣的問題。