【发布时间】:2014-09-05 11:21:14
【问题描述】:
我在 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 Schema 更改后必须跟 :db.install/attribute 或 :db.alter/attribute
显然我做错了什么。有人可以帮忙吗?
谢谢!
【问题讨论】:
-
你的向量嵌套太多了吗?你需要做
@(d/transact conn retract-statements),而不是`@(d/transact conn [retract-statements]) - 因为retract-statements 已经是向量的向量。只是一个想法...... -
我刚刚使用了 (delete-database uri) 和 (create-database uri),这对我的目的来说非常好。似乎没有办法收回属性 - 似乎摆脱所有属性的唯一可行方法是重命名。这是一个正确的说法吗?