6

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

这应该返回

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

....所有用户定义的分区在哪里。

4

2 回答 2

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 (build 0.8.3524) 有一个缺点,即:db.part/txand :db.part/user(三个内置分区中的两个) 被特殊处理并且实际上与:db.part/dbvia没有关联:db.install/partition,因此上述查询函数的结果不会包括两者。

这个问题在 Datomic 的未来版本之一中得到解决。:db.part/tx同时,您应该注意:db.part/user将自己包含在结果集中。

于 2012-09-16T22:15:50.600 回答
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 内置分区。

于 2013-04-15T22:50:08.393 回答