我在 Datomic 模式中创建了一组属性。它们的 :db/idents 分为三个命名空间::name、:tree、:node。现在我想删除所有这些并重新开始。我已找到所有必需的属性:
(def results
(q '[:find ?e
:where [?e :db/ident ?v]
[(namespace ?v) ?res]
[(contains? #{"task", "node", "tree"} ?res)]
]
(db conn)))
然后创建了一组retractEntity语句:
(def retract-statements
(into [] (map #(vector :db.fn/retractEntity (first %1)) results)))
现在我正在尝试调用事务:
@(d/transact conn [retract-statements])
它给了我: :db.error/invalid-attribute 架构更改必须跟在 :db.install/attribute 或 :db.alter/attribute
显然我做错了什么。有人可以帮忙吗?
谢谢!
最佳答案
Datomic 中无法直接收回属性。一旦安装了某个属性,它就会永远存在,除非您删除整个数据库。这是有道理的,因为 Datomic(除了特殊的切除情况)永远不会真正删除任何数据 - 如果您实际上可以删除属性,那么最初针对这些属性进行交易的数据将无法检索。
请注意,您可以重命名属性,但它仍然保留其旧标识作为同义词,除非您将其重新用于其他用途。
关于clojure - 如何在 Datomic 中收回属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25684750/