首页 文章

如何在Datomic中收回属性?

提问于
浏览
4

我在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 回答

  • 6

    无法在Datomic中直接收回属性 . 安装属性后,除非删除整个数据库,否则它将永远存在 . 这是有道理的,因为Datomic(除了在切除的特殊情况下)永远不会真正删除任何数据 - 如果您实际上可以删除属性,那么最初针对这些属性进行交易的数据将无法检索 .

    请注意,您可以重命名属性,但它仍然保留其旧标识作为同义词,除非您将其重新用于其他内容 .

相关问题