首頁  >  文章  >  後端開發  >  使用 Go 程式碼中的值回填新列

使用 Go 程式碼中的值回填新列

王林
王林轉載
2024-02-06 11:27:03916瀏覽

使用 Go 代码中的值回填新列

問題內容

使用 Go 應用程式程式碼中的值回填新列的最佳方法是什麼?理想情況下,我會遍歷每一行,呼叫 Go 程式碼,並使用返回值作為列值。 Go 代碼是有狀態的。也就是說,它作用於在每個新行上更新的資料結構,並根據此資訊計算一個值。

我正在考慮做的是進行一次遷移,將新列新增為可為空,然後在遷移後執行 Go 程式來回填行。但是,如果所有這些都可以在一次遷移中完成,那就更好了,特別是因為該列從一開始就應該不為 NULL。

我們使用 Flyway 進行遷移。我們的資料庫是 Postgres 11.5。


正確答案


不可能透過遷移以這種方式填入新欄位-即在交易內一步完成。相反,您需要類似以下方法:

  1. 更新應用程式以正常處理新列中標記值在時間戳記 123 之前的行。
  2. 在遷移中新增具有非空約束和預設標記值的新欄位。
  3. 執行 go 程序,將時間戳記 123 之前的行的哨兵值更新為適當的值。

此方法需要對應用程式進行更改,但不需要維護時段。它還確保遷移不會因為遷移時不滿足約束而失敗。

以上是使用 Go 程式碼中的值回填新列的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除