查询以列出Datomic中的所有分区

时间:2012-09-16 18:03:52

标签: database clojure datomic

列出Datomic数据库的所有分区的查询是什么?

这应该返回

[[:db.part/db] [:db.part/tx] [:db.part/user] .... ]

其中....是所有用户定义的分区。

2 个答案:

答案 0 :(得分:7)

您应该能够通过:db.part/db属性搜索与:db.install/partition实体关联的所有实体来获取数据库中所有分区的列表:

(ns myns
  (:require [datomic.api :as d]))

(defn get-partitions [db]
  (d/q '[:find ?ident :where [:db.part/db :db.install/partition ?p]
                             [?p :db/ident ?ident]]
       db))

注意

当前版本的Datomic(版本0.8.3524)有一个缺点,即:db.part/tx:db.part/user(三个内置分区中的两个)被特别处理,实际上并没有与:db.part/db通过:db.install/partition,因此上述查询功能的结果将不包含这两项。

在Datomic的未来版本之一中出现此问题is going to be addressed。在此期间,您应该自己在结果集中加入:db.part/tx:db.part/user

答案 1 :(得分:1)

第一种方法 - 使用查询

=> (q '[:find ?i :where 
       [:db.part/db :db.install/partition ?p] [?p :db/ident ?i]]
     (db conn))

第二种方法 - 来自db对象

(filter #(instance? datomic.db.Partition %) (:elements (db conn)))

第二种方法返回 datomic.db.Partition 对象的序列,如果我们想要获得有关该分区的其他信息,这可能很有用。

两种方法都有已知的错误/不一致:它们不返回:db.part / tx和:db.part / user内置分区。