我在Datomic架构中创建了一组属性 . 他们的:db / ident分为三个命名空间:: 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
显然我做错了什么 . 有人可以帮忙吗?
谢谢!
1 回答
无法在Datomic中直接收回属性 . 安装属性后,除非删除整个数据库,否则它将永远存在 . 这是有道理的,因为Datomic(除了在切除的特殊情况下)永远不会真正删除任何数据 - 如果您实际上可以删除属性,那么最初针对这些属性进行交易的数据将无法检索 .
请注意,您可以重命名属性,但它仍然保留其旧标识作为同义词,除非您将其重新用于其他内容 .