我在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
显然我做错了什么。有人可以帮忙吗?
谢谢!
答案 0 :(得分:6)
无法直接收回Datomic中的属性。安装属性后,除非删除整个数据库,否则它将永远存在。这是有道理的,因为Datomic(除了在切除的特殊情况下)永远不会真正删除任何数据 - 如果您实际上可以删除属性,那么最初针对这些属性进行交易的数据将无法检索。
请注意,您可以重命名属性,但它仍然保留其旧身份作为同义词,除非您将其重新用于其他内容。
答案 1 :(得分:1)
虽然您不能撤回架构,但您可以撤回有关属性的所有内容(有关该属性的所有内容都可以通过 AEVT 索引找到),然后将该属性标记为不使用。例如,您可以使用 :db/doc
字符串执行此操作。
如果你真的想要它就消失你可以删除该属性。如果你这样做,你会失去历史,但它会从轨道上破坏属性。如果要删除该属性,请先进行数据库备份,因为如果删除错误,数据将无法恢复。