使用ragtime回滚所有迁移

时间:2016-02-23 22:05:26

标签: clojure database-migration rollback

我正在处理一些假设下面的rollback函数会回滚所有迁移的代码。但是,它似乎只是回滚了最新的迁移。

(defn create-migrator
  [spec]
  {:datastore  (ragtime.jdbc/sql-database spec)
   :migrations (ragtime.jdbc/load-resources "migrations")})

(defn rollback
  [env]
  (-> (create-db-spec env)
      (create-migrator)
      (ragtime.repl/rollback)))

如何更改rollback以回滚所有迁移?

1 个答案:

答案 0 :(得分:1)

Ragtime rollback function接受多个选项。其中有许多要回滚的迁移迁移或要回滚到的迁移ID(amount-or-id)。

ragtime.jdbc/load-resources返回按名称排序的所有迁移的seq(按照惯例,它们将按其应用顺序排序),您可以查询第一个并获取其ID:

(-> (ragtime.jdbc/load-resources "migrations")
    (first)
    (:id))

如果您的数据库是最新的迁移,我想使用迁移的count seq amount也应该有用。

对于给定的例子:

(defn rollback-all
  [env]
  (let [spec (create-db-spec env)
        migrator (create-migrator spec)
        count-migrations (-> migrator :migrations count)]
    (ragtime.repl/rollback migrator count-migrations)))