簡體   English   中英

Clojure:如何在生產中運行復雜的數據庫遷移?

[英]Clojure: How to run complex DB migration in production?

想象一下,作為新版本發布到生產環境的一部分,您有一項任務要執行復雜的數據庫遷移,您通常如何在 Clojure 項目中執行此操作?

一個新的“大”版本的例子,遷移:

  • V1__create_new_tables (簡單,只需使用帶有 CREATE TABLE 的 vanilla SQL)
  • V2__perform_complex_migration (創建表 foo,循環遍歷另一個表並使用自定義 Clojure 代碼用一些數據填充新的foo表)
  • V3__do_something_else (簡單,可能是另一個簡單的 SQL 查詢

您將如何以自動化方式進行第二次遷移? 必須執行所有 3 個遷移才能使新版本成功。

看起來Flyway DB 有 Java 遷移,看起來正是需要的,但有什么方法可以從 Clojure 使用它?

也許可以添加另一個.clj文件以及其他.sql遷移,Flyway 會選擇它嗎?

對於 Clojure 中看似非常常見的任務,我沒有任何示例,只有簡單的 SQL 查詢,我有點驚訝。

引用Migratus 自述文件

定義基於代碼的遷移

通過將 .edn 文件添加到包含命名空間和要運行的向上/向下函數的遷移目錄來創建基於代碼的遷移,例如 resources/migrations/20170331141500-import-users.edn:

{:ns app.migrations.import-users
 :up-fn migrate-up
 :down-fn migrate-down} 

然后,在 src/app/migrations/import_users.clj 中:

(ns app.migrations.import-users)

(defn migrate-up [config]
;; do stuff here
)

(defn migrate-down [config]    
;; maybe undo stuff here
) 

向上和向下遷移函數都應該接受一個參數,即傳遞給 Migratus 的配置 map(因此您的遷移可以配置)。 您可以通過在 EDN 文件中設置:up-fn 或 down-fn 為 nil 來省略向上或向下遷移。

暫無
暫無

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

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