<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>Datomic Knowledgebase - Recent questions in On-Prem</title>
<link>https://ask.datomic.com/index.php/questions/datomic/on-prem</link>
<description>Powered by Question2Answer</description>
<item>
<title>Datomic Pro's executable shell scripts (e.g. transactor.sh) fail on NixOS</title>
<link>https://ask.datomic.com/index.php/1880/datomic-pros-executable-shell-scripts-transactor-fail-nixos</link>
<description>&lt;p&gt;This is because the shebang is &lt;code&gt;#!/bin/bash&lt;/code&gt; which is not standards compliant and NixOS does not expose this. The compliant shebang that works on all systems is &lt;code&gt;#!/usr/bin/env bash&lt;/code&gt; (according to the NixOS user). The impact of this is that when I do user interview calls for Datomic Browser and ask users to install Datomic Pro with mbrainz, NixOS users get errors on &lt;code&gt;restore-db&lt;/code&gt; etc. The resolution is I have to instruct them to edit in place the Datomic shell scripts in &lt;code&gt;bin/&lt;/code&gt; to rewrite their shebang to the correct value.&lt;/p&gt;
&lt;p&gt;datomic pro 1.0.7469&lt;/p&gt;
</description>
<category>On-Prem</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/1880/datomic-pros-executable-shell-scripts-transactor-fail-nixos</guid>
<pubDate>Thu, 18 Dec 2025 13:40:50 +0000</pubDate>
</item>
<item>
<title>Why does changing the #inst reader make my query fail?</title>
<link>https://ask.datomic.com/index.php/1867/why-does-changing-the-inst-reader-make-my-query-fail</link>
<description>&lt;p&gt;does datomic pro print and read queries during datomic.api/q, maybe as part of its query cache? we’ve changed the &lt;code&gt;#inst&lt;/code&gt; reader in our project to return java.time.Instant and now a java.util.Date we pass to a query comes out as a &lt;code&gt;java.time.Instant&lt;/code&gt;. Is that expected &amp;amp; documented somewhere?&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(require '[datomic.api])

;; this is demonstrating an issue we ran into where overwriting the
;; `#inst` reader broke `datomic.api/q` in surprising ways.

(def schema
  [{:db/ident :exit/datetime
    :db/valueType :db.type/instant
    :db/cardinality :db.cardinality/one}])

(def conn
  (datomic.api/connect (doto &quot;datomic:mem://inst-java-time-readers&quot; datomic.api/create-database)))

@(datomic.api/transact conn schema)

(def db+data
  (:db-after
   @(datomic.api/transact conn [{:exit/datetime #inst &quot;2024&quot;}
                                {:exit/datetime #inst &quot;2025&quot;}
                                {:exit/datetime #inst &quot;2026&quot;}])))

;; this works
(count (datomic.api/q [:find '?f
                       :where
                       '[?f :exit/datetime ?exit]
                       [(list '&amp;lt; '?exit (java.util.Date.))]]
                      db+data))


;; fails silently (returns incorrect number of results)
(binding [*data-readers* (assoc *data-readers* 'inst (fn [cs] (java.util.Date/.toInstant (clojure.instant/read-instant-date cs))))]
  (count (datomic.api/q [:find '?f
                         :where
                         '[?f :exit/datetime ?exit]
                         [(list '&amp;lt; '?exit (java.util.Date.))]]
                        db+data)))

;; fails loudly with processing rule: (q__124130 ?f), message:
;; processing clause: [?f :exit/datetime ?exit], message:
;; java.lang.ClassCastException: class java.time.Instant cannot be
;; cast to class java.util.Date (java.time.Instant and java.util.Date
;; are in module java.base of loader 'bootstrap')
(binding [*data-readers* (assoc *data-readers* 'inst (fn [cs] (java.util.Date/.toInstant (clojure.instant/read-instant-date cs))))]
  (count (datomic.api/q [:find '?f
                         :where
                         '[?f :exit/datetime ?exit]
                         [(list java.util.Date/.before '?exit (java.util.Date.))]]
                        db+data)))

;; My guess is that this is related to datomic's [query
;; caching](https://docs.datomic.com/query/query-executing.html#query-caching)
;; because once a query has been cached, a sucessive call with the
;; same query value and a bound #inst reader succeeds:
(let [query [:find '?f
             :where
             '[?f :exit/datetime ?exit]
             [(list java.util.Date/.before '?exit (java.util.Date.))]]]
  (= (count (datomic.api/q query db+data))
     (binding [*data-readers* (assoc *data-readers* 'inst (fn [cs] (java.util.Date/.toInstant (clojure.instant/read-instant-date cs))))]
       (count (datomic.api/q query db+data)))))
&lt;/code&gt;&lt;/pre&gt;
</description>
<category>On-Prem</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/1867/why-does-changing-the-inst-reader-make-my-query-fail</guid>
<pubDate>Mon, 20 Oct 2025 17:21:00 +0000</pubDate>
</item>
<item>
<title>Using a collection of datoms as input to a query</title>
<link>https://ask.datomic.com/index.php/1089/using-a-collection-of-datoms-as-input-to-a-query</link>
<description>&lt;p&gt;I was wondering if there is a way to use a collection of datoms obtained from &lt;code&gt;d/tx-range + get a single tx&lt;/code&gt; or received from a listener that subscribed to a tx queue as input to &lt;code&gt; d/q&lt;/code&gt;? The nature of this collection looks very similar to history db which can be used with &lt;code&gt;d/q&lt;/code&gt;, however passing this collection as input does not produce the expected result. Neither there is any error.&lt;/p&gt;
</description>
<category>On-Prem</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/1089/using-a-collection-of-datoms-as-input-to-a-query</guid>
<pubDate>Thu, 24 Apr 2025 12:51:36 +0000</pubDate>
</item>
<item>
<title>Why does Datomic store all databases in a single datomic_kvs table instead of having a separate table per database?</title>
<link>https://ask.datomic.com/index.php/1085/datomic-databases-datomickvs-instead-separate-database</link>
<description>&lt;p&gt;I am curious about the reasoning behind keeping all Datomic databases in a single datomic_kvs table rather than creating a separate table for each database.&lt;/p&gt;
&lt;p&gt;Some disadvantages of the current approach that I see:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;More complex maintenance: For example, if VACUUM FULL is needed because one database is highly active and generates a lot of garbage, it will block all Datomic databases, not just the affected one.&lt;/li&gt;
&lt;li&gt;Difficult to determine per-database segment size: Since the table contains entries for all databases, simply counting elements in datomic_kvs does not provide a per-database segment count.&lt;/li&gt;
&lt;li&gt;Database deletion requires a special utility: Instead of simply dropping a table, removing a database requires a dedicated tool.&lt;/li&gt;
&lt;li&gt;Disk space is not immediately freed: Because of the previous point, space is not reclaimed until VACUUM FULL is run, which again locks all Datomic databases.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Given these limitations, what are the key advantages that justify using a single datomic_kvs table instead of separate tables per database?&lt;/p&gt;
&lt;p&gt;Also, is there any plan to introduce a mode where each Datomic database has its own separate table?&lt;/p&gt;
</description>
<category>On-Prem</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/1085/datomic-databases-datomickvs-instead-separate-database</guid>
<pubDate>Mon, 03 Mar 2025 17:06:33 +0000</pubDate>
</item>
<item>
<title>Regression in latest datomic when transacting data &amp; schema in one tx</title>
<link>https://ask.datomic.com/index.php/1070/regression-latest-datomic-when-transacting-data-schema-one</link>
<description>&lt;p&gt;Let's say you have a transaction like:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{:db/id :admin/id,
 :db/unique :db.unique/identity
 :db.install/_attribute :db.part/db}
{:db/id &quot;admin&quot;
  :db/ident :admin/bug
  :admin/id admin-id}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;(So both schema &amp;amp; data in one tx)&lt;/p&gt;
&lt;p&gt;Normally you would expect idents to work properly - e.g. after that transaction &lt;code&gt;(d/entity db [:admin/id admin-id])&lt;/code&gt; would return the &lt;code&gt;:admin/bug&lt;/code&gt; entity. Unfortunately that's not the case (though it used to work in previous versions of datomic) - it returns nil. Splitting the transaction into two makes everything work.&lt;/p&gt;
&lt;p&gt;Here's a full repro:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(require '[datomic.api :as d])
(def conn (d/connect (doto (str &quot;datomic:mem://&quot; (d/squuid)) (d/create-database))))
@(d/transact conn [{:db/id &quot;new&quot;
                    :db/ident :admin/id,
                    :db/valueType :db.type/uuid,
                    :db/cardinality :db.cardinality/one,
                    :db/doc &quot;Id of the admin&quot;
                    :db.install/_attribute :db.part/db}])

(def admin-id (d/squuid))

@(d/transact conn [{:db/id :admin/id,
                    :db/unique :db.unique/identity
                    :db.install/_attribute :db.part/db}
                   {:db/id &quot;admin&quot;
                    :db/ident :admin/bug
                    :admin/id admin-id}])

(def db (d/db conn))

(if (some? (d/entity db [:admin/id admin-id]))
  (println &quot;All OK - admin is found by identity&quot;)
  (println &quot;Admin identity not there? Let's see the entity: &quot; (d/touch (d/entity db :admin/bug))))
&lt;/code&gt;&lt;/pre&gt;
</description>
<category>On-Prem</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/1070/regression-latest-datomic-when-transacting-data-schema-one</guid>
<pubDate>Wed, 19 Feb 2025 20:44:39 +0000</pubDate>
</item>
<item>
<title>&quot;No suitable driver&quot; when starting peer</title>
<link>https://ask.datomic.com/index.php/1068/no-suitable-driver-when-starting-peer</link>
<description>&lt;p&gt;In the peer container:&lt;/p&gt;
&lt;p&gt;root@3249b8857f6f:/opt/datomic# bin/repl&lt;br&gt;
Clojure 1.11.4&lt;br&gt;
user=&amp;gt; (Class/forName &quot;org.postgresql.Driver&quot;)&lt;br&gt;
org.postgresql.Driver&lt;br&gt;
user=&amp;gt; (require 'datomic.peer-server)&lt;br&gt;
nil&lt;br&gt;
user=&amp;gt; (datomic.peer-server/-main&lt;br&gt;
  &quot;-h&quot; &quot;0.0.0.0&quot;&lt;br&gt;
  &quot;-p&quot; &quot;8998&quot;&lt;br&gt;
  &quot;-a&quot; &quot;none,none&quot;&lt;br&gt;
  &quot;-d&quot; &quot;datomic,datomic:sql://mydb?jdbc=postgresql://catalyst-postgres-1:5432/datomic?user=datomic&amp;amp;password=datomic&amp;amp;jdbc-class=org.postgresql.Driver&quot;)&lt;br&gt;
Execution error (SQLException) at java.sql.DriverManager/getDriver (DriverManager.java:299).&lt;br&gt;
No suitable driver&lt;br&gt;
user=&amp;gt; &lt;/p&gt;
</description>
<category>On-Prem</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/1068/no-suitable-driver-when-starting-peer</guid>
<pubDate>Fri, 24 Jan 2025 01:10:09 +0000</pubDate>
</item>
<item>
<title>transactor on-prem logging</title>
<link>https://ask.datomic.com/index.php/1037/transactor-on-prem-logging</link>
<description>&lt;p&gt;Transactor emits too much log data with INFO level which makes it difficult to separate important realtime metrics/events from low level stuff useful only for troubleshooting. E.g.:&lt;br&gt;
&lt;code&gt;`&lt;/code&gt;&lt;br&gt;
2024-12-23 12:14:42.147 INFO  default    datomic.kv-cluster - {:event :kv-cluster/create-val, :val-key &quot;67695432-37bb-4155-9731-0ad26be7e1de&quot;, :bufsize 882, :msec 5.65, :phase :end, :pid 9, :tid 692}&lt;br&gt;
2024-12-23 12:14:42.151 INFO  default    datomic.kv-cluster - {:event :kv-cluster/create-val, :val-key &quot;67695432-11c9-4b95-85dc-1d081032a132&quot;, :bufsize 1170, :msec 6.64, :phase :end, :pid 9, :tid 694}&lt;/p&gt;
&lt;p&gt;...&lt;/p&gt;
&lt;p&gt;2024-12-23 12:32:35.033 INFO  default    datomic.log-gc - {:gcName &quot;G1 Young Generation&quot;, :gcAction &quot;end of minor GC&quot;, :gcCause &quot;GCLocker Initiated GC&quot;, :event :gc, :duration 70, :pid 9, :tid 5}&lt;br&gt;
2024-12-23 12:32:35.396 INFO  default    datomic.log-gc - {:gcName &quot;G1 Young Generation&quot;, :gcAction &quot;end of minor GC&quot;, :gcCause &quot;G1 Evacuation Pause&quot;, :event :gc, :duration 63, :pid 9, :tid 5}&lt;br&gt;
2024-12-23 12:32:35.749 INFO  default    datomic.log-gc - {:gcName &quot;G1 Young Generation&quot;, :gcAction &quot;end of minor GC&quot;, :gcCause &quot;GCLocker Initiated GC&quot;, :event :gc, :duration 49, :pid 9, :tid 5}&lt;br&gt;
2024-12-23 12:32:36.135 INFO  default    datomic.log-gc - {:gcName &quot;G1 Young Generation&quot;, :gcAction &quot;end of minor GC&quot;, :gcCause &quot;G1 Evacuation Pause&quot;, :event :gc, :duration 68, :pid 9, :tid 5}&lt;br&gt;
2024-12-23 12:32:36.487 INFO  default    datomic.log-gc - {:gcName &quot;G1 Young Generation&quot;, :gcAction &quot;end of minor GC&quot;, :gcCause &quot;GCLocker Initiated GC&quot;, :event :gc, :duration 65, :pid 9, :tid 5}&lt;br&gt;
2024-12-23 12:32:36.853 INFO  default    datomic.log-gc - {:gcName &quot;G1 Young Generation&quot;, :gcAction &quot;end of minor GC&quot;, :gcCause &quot;GCLocker Initiated GC&quot;, :event :gc, :duration 55, :pid 9, :tid 5}&lt;br&gt;
2024-12-23 12:32:37.239 INFO  default    datomic.log-gc - {:gcName &quot;G1 Young Generation&quot;, :gcAction &quot;end of minor GC&quot;, :gcCause &quot;G1 Evacuation Pause&quot;, :event :gc, :duration 73, :pid 9, :tid 5}&lt;br&gt;
2024-12-23 12:32:37.615 INFO  default    datomic.log-gc - {:gcName &quot;G1 Young Generation&quot;, :gcAction &quot;end of minor GC&quot;, :gcCause &quot;G1 Evacuation Pause&quot;, :event :gc, :duration 65, :pid 9, :tid 5}&lt;br&gt;
2024-12-23 12:32:37.961 INFO  default    datomic.log-gc - {:gcName &quot;G1 Young Generation&quot;, :gcAction &quot;end of minor GC&quot;, :gcCause &quot;G1 Evacuation Pause&quot;, :event :gc, :duration 69, :pid 9, :tid 5}&lt;br&gt;
2024-12-23 12:32:38.285 INFO  default    datomic.log-gc - {:gcName &quot;G1 Young Generation&quot;, :gcAction &quot;end of minor GC&quot;, :gcCause &quot;G1 Evacuation Pause&quot;, :event :gc, :duration 58, :pid 9, :tid 5}&lt;br&gt;
2024-12-23 12:32:38.713 INFO  default    datomic.log-gc - {:gcName &quot;G1 Young Generation&quot;, :gcAction &quot;end of minor GC&quot;, :gcCause &quot;G1 Evacuation Pause&quot;, :event :gc, :duration 68, :pid 9, :tid 5}&lt;br&gt;
2024-12-23 12:32:39.039 INFO  default    datomic.log-gc - {:gcName &quot;G1 Young Generation&quot;, :gcAction &quot;end of minor GC&quot;, :gcCause &quot;G1 Evacuation Pause&quot;, :event :gc, :duration 62, :pid 9, :tid 5}&lt;br&gt;
2024-12-23 12:32:39.364 INFO  default    datomic.log-gc - {:gcName &quot;G1 Young Generation&quot;, :gcAction &quot;end of minor GC&quot;, :gcCause &quot;G1 Evacuation Pause&quot;, :event :gc, :duration 66, :pid 9, :tid 5}&lt;br&gt;
2024-12-23 12:32:39.721 INFO  default    datomic.log-gc - {:gcName &quot;G1 Young Generation&quot;, :gcAction &quot;end of minor GC&quot;, :gcCause &quot;G1 Evacuation Pause&quot;, :event :gc, :duration 78, :pid 9, :tid 5}&lt;br&gt;
2024-12-23 12:32:39.923 INFO  default    datomic.lifecycle - {:tid 19, :username &quot;krVN7t+5clwdg5/HazGJsrE0ckBlt50uk+HlYn9vbwY=&quot;, :port 4334, :rev 4243344, :host &quot;0.0.0.0&quot;, :pid 9, :event :transactor/heartbeat, :version &quot;1.0.7187&quot;, :timestamp 1734957159894, :encrypt-channel true}&lt;br&gt;
&lt;code&gt;`&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;It would be nice to review log levels and have a paper on messages generated with INFO level. Also the log line seems to be EDN for which there is no parser on ELK/Grafana side. Can this be made JSON to enable structural logging?&lt;/p&gt;
</description>
<category>On-Prem</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/1037/transactor-on-prem-logging</guid>
<pubDate>Mon, 23 Dec 2024 12:18:20 +0000</pubDate>
</item>
<item>
<title>How to deprecate a composite tuple?</title>
<link>https://ask.datomic.com/index.php/1035/how-to-deprecate-a-composite-tuple</link>
<description>&lt;p&gt;As Datomic does not allow deleting attributes from schema we use the policy of adding a prefix to the attributes that are no longer used, e.g. &lt;code&gt;:foo/bar&lt;/code&gt; becomes &lt;code&gt;:foo/#bar&lt;/code&gt;. We then stop inserting deprecated attributes in the app code. This way old entities get to keep deprecated attributes, new ones do not have them. This works with all kinds of attributes, however this is not sufficient for composite tuples as Datomic calculates/inserts their values automatically. &lt;/p&gt;
&lt;p&gt;Is there a way to instruct Datomic to stop populating a composite tuple? &lt;/p&gt;
</description>
<category>On-Prem</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/1035/how-to-deprecate-a-composite-tuple</guid>
<pubDate>Sun, 24 Nov 2024 09:06:05 +0000</pubDate>
</item>
<item>
<title>Using Valcache via Docker bind mounts</title>
<link>https://ask.datomic.com/index.php/1012/using-valcache-via-docker-bind-mounts</link>
<description>&lt;p&gt;I'm evaluating caching options for Datomic Pro. Valcache sounds like a great fit, but there is one thing that might be a showstopper.&lt;/p&gt;
&lt;p&gt;The &lt;a rel=&quot;nofollow&quot; href=&quot;https://docs.datomic.com/pro/operation/valcache.html#prerequisites&quot;&gt;Prerequisites docs&lt;/a&gt; says that &quot;Valcache relies on an SSD with the strictatime and lazytime flags set&quot;. This requirement I can meet pretty easily by remounting the disk on the hosts running the peers.&lt;/p&gt;
&lt;p&gt;Now, the applications that are Datomic peers, who would be the users of these Valcaches, run as Docker containers in a Docker Swarm. The idea is to mount the Valcache as a &lt;a rel=&quot;nofollow&quot; href=&quot;https://docs.docker.com/storage/bind-mounts/&quot;&gt;Docker bind mount&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Would this work? The underlaying SSD disk would be mounted with strictatime and lazytime, but would whatever mechanism that requires these flags to be set work through a Docker bind mount?&lt;/p&gt;
</description>
<category>On-Prem</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/1012/using-valcache-via-docker-bind-mounts</guid>
<pubDate>Thu, 11 Apr 2024 09:50:54 +0000</pubDate>
</item>
<item>
<title>How do I restart a gc-deleted-dbs after it got canceled in &quot;Deleting garbage segments&quot; phase?</title>
<link>https://ask.datomic.com/index.php/1004/restart-deleted-canceled-deleting-garbage-segments-phase</link>
<description>&lt;p&gt;I recently (backed up and) deleted a fairly large database in production, and had gotten partway through reclaiming the space in Postgres with &lt;code&gt;bin/datomic -Ddatomic.gcStoragePaceMsec=5 gc-deleted-dbs [...]&lt;/code&gt; when I wanted to speed it up by removing the pacing, so I stopped it with Ctrl-C. The docs explicitly say that &quot;You can kill a gc-deleted-dbs process and restart it later with no adverse affects&quot; and I had previously done exactly that to speed up the pacing once before.&lt;/p&gt;
&lt;p&gt;Unfortunately, it no longer recognizes any need to clean up garbage segments, the third stage (after log and index segments). Adding a new temporary database, filling it with a bunch of junk transactions, and deleting it, successfully goes through the whole process for that DB only, but does not trigger any additional garbage segment cleanup. (If I don't add the junk transactions it skips that stage entirely.)&lt;/p&gt;
</description>
<category>On-Prem</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/1004/restart-deleted-canceled-deleting-garbage-segments-phase</guid>
<pubDate>Tue, 19 Mar 2024 04:10:45 +0000</pubDate>
</item>
<item>
<title>Possibly security issue with the dev H2 storage?</title>
<link>https://ask.datomic.com/index.php/1003/possibly-security-issue-with-the-dev-h2-storage</link>
<description>&lt;p&gt;While trying to understand more about the behaviour of Datomic dev (mainly from a security/encryption point of view), I attempted to connect to datomic.mv.db from an instance of the H2 console. I accidentally tried to log in as &quot;admin&quot; with a blank password and was surprised when I connected successfully. Connecting as &quot;admin&quot; with any password fails, so it seems explicitly to be blank. As far as I can tell I only have public  schema access and can't see any transacted data, but I am able to run SQL queries in the console.&lt;/p&gt;
&lt;p&gt;Clearly a dev transactor isn't intended to be high security, but admin with a blank password seems risky even for a dev environment. In most SQL environments I work with, the sa/admin account is just disabled if not used. Am I missing something?&lt;/p&gt;
&lt;p&gt;As an aside, does the dev transactor use H2's AES encryption or is the resulting data file unencrypted?&lt;/p&gt;
</description>
<category>On-Prem</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/1003/possibly-security-issue-with-the-dev-h2-storage</guid>
<pubDate>Wed, 13 Mar 2024 21:58:26 +0000</pubDate>
</item>
<item>
<title>Why is the pull pattern for wild card giving me an error?</title>
<link>https://ask.datomic.com/index.php/984/why-is-the-pull-pattern-for-wild-card-giving-me-an-error</link>
<description>&lt;p&gt;I am having an issue with a query and wild card patterns:&lt;br&gt;
(d/q {:query '[:find (pull ?page pattern)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;                         :in $ ?id pattern
                         :where
                         [?page :page/id ?id]]
                  :args [(d/db conn)
                         id
                         '[*]]})
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;It gives me an error:&lt;br&gt;
 Attribute identifier clojure.core/* of class: class java.lang.String does not start with a colon&lt;br&gt;
Any idea why it doesn't work? I also tried adding the pattern directly to the pull expression, but I get the exact same issue&lt;/p&gt;
</description>
<category>On-Prem</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/984/why-is-the-pull-pattern-for-wild-card-giving-me-an-error</guid>
<pubDate>Wed, 31 Jan 2024 16:27:11 +0000</pubDate>
</item>
<item>
<title>java.lang.IllegalStateException: Can't set!: *io-index* from non-binding thread</title>
<link>https://ask.datomic.com/index.php/965/java-lang-illegalstateexception-cant-index-binding-thread</link>
<description>&lt;p&gt;I'm getting the following error in the transactor when trying to transact some data using a transaction function. It only happens for a specific query and set of data.&lt;/p&gt;
&lt;p&gt;I'm not sure about the correct place to report errors like this, so feel free to direct me to another place if this is not the correct place.&lt;/p&gt;
&lt;p&gt;Also let me know if you need any other information.&lt;/p&gt;
&lt;p&gt;I am using datomic version 1.0.7075, peer and transactor have the same version.&lt;/p&gt;
&lt;p&gt;I'm using JDK 21, Temurin (datomic transactor is running inside &lt;code&gt;clojure:temurin-21-tools-deps-alpine&lt;/code&gt; docker container)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;taskfeed-datomic  | java.lang.IllegalStateException: Can't set!: *io-index* from non-binding thread
taskfeed-datomic  |     at clojure.lang.Var.set(Var.java:223)
taskfeed-datomic  |     at datomic.measure.io_stats$using_index_BANG_.invokeStatic(io_stats.clj:57)
taskfeed-datomic  |     at datomic.measure.io_stats$using_index_BANG_.invoke(io_stats.clj:54)
taskfeed-datomic  |     at datomic.index.Index.seek(index.clj:553)
taskfeed-datomic  |     at datomic.btset$seek.invokeStatic(btset.clj:399)
taskfeed-datomic  |     at datomic.btset$seek.invoke(btset.clj:394)
taskfeed-datomic  |     at datomic.db.Db.seekEAVT(db.clj:2410)
taskfeed-datomic  |     at datomic.query$eav.invokeStatic(query.clj:78)
taskfeed-datomic  |     at datomic.query$eav.invoke(query.clj:69)
taskfeed-datomic  |     at datomic.query.EntityMap.valAt(query.clj:213)                                                                                                                               taskfeed-datomic  |     at datomic.query.EntityMap.entryAt(query.clj:199)                                                                                                                             taskfeed-datomic  |     at clojure.lang.RT.find(RT.java:860)
taskfeed-datomic  |     at clojure.core$select_keys.invokeStatic(core.clj:1562)
taskfeed-datomic  |     at clojure.core$select_keys.invoke(core.clj:1555)
taskfeed-datomic  |     at ns_272$eval273$fn__274$fn__275$fn__276.invoke(NO_SOURCE_FILE:143)
taskfeed-datomic  |     at clojure.walk$prewalk.invokeStatic(walk.clj:65)
taskfeed-datomic  |     at clojure.walk$prewalk.invoke(walk.clj:61)
taskfeed-datomic  |     at clojure.core$partial$fn__5908.invoke(core.clj:2641)
taskfeed-datomic  |     at clojure.core$map$fn__5935.invoke(core.clj:2770)
taskfeed-datomic  |     at clojure.lang.LazySeq.sval(LazySeq.java:42)
taskfeed-datomic  |     at clojure.lang.LazySeq.seq(LazySeq.java:51)
taskfeed-datomic  |     at clojure.lang.RT.seq(RT.java:535)
taskfeed-datomic  |     at clojure.core$seq__5467.invokeStatic(core.clj:139)
taskfeed-datomic  |     at clojure.core.protocols$seq_reduce.invokeStatic(protocols.clj:24)
taskfeed-datomic  |     at clojure.core.protocols$fn__8236.invokeStatic(protocols.clj:75)
taskfeed-datomic  |     at clojure.core.protocols$fn__8236.invoke(protocols.clj:75)
taskfeed-datomic  |     at clojure.core.protocols$fn__8178$G__8173__8191.invoke(protocols.clj:13)
taskfeed-datomic  |     at clojure.core$reduce.invokeStatic(core.clj:6886)
taskfeed-datomic  |     at clojure.core$into.invokeStatic(core.clj:6958)
taskfeed-datomic  |     at clojure.walk$walk.invokeStatic(walk.clj:50)
taskfeed-datomic  |     at clojure.walk$prewalk.invokeStatic(walk.clj:65)
taskfeed-datomic  |     at clojure.walk$prewalk.invoke(walk.clj:61)
taskfeed-datomic  |     at clojure.core$partial$fn__5908.invoke(core.clj:2641)
taskfeed-datomic  |     at clojure.core$map$fn__5935.invoke(core.clj:2772)
taskfeed-datomic  |     at clojure.lang.LazySeq.sval(LazySeq.java:42)
taskfeed-datomic  |     at clojure.lang.LazySeq.seq(LazySeq.java:51)
taskfeed-datomic  |     at clojure.lang.Cons.next(Cons.java:39)
taskfeed-datomic  |     at clojure.lang.RT.next(RT.java:713)                                                                                                                                          taskfeed-datomic  |     at clojure.core$next__5451.invokeStatic(core.clj:64)
taskfeed-datomic  |     at clojure.core.protocols$fn__8249.invokeStatic(protocols.clj:169)
taskfeed-datomic  |     at clojure.core.protocols$fn__8249.invoke(protocols.clj:124)
taskfeed-datomic  |     at clojure.core.protocols$fn__8204$G__8199__8213.invoke(protocols.clj:19)
taskfeed-datomic  |     at clojure.core.protocols$seq_reduce.invokeStatic(protocols.clj:31)
taskfeed-datomic  |     at clojure.core.protocols$fn__8236.invokeStatic(protocols.clj:75)
taskfeed-datomic  |     at clojure.core.protocols$fn__8236.invoke(protocols.clj:75)
taskfeed-datomic  |     at clojure.core.protocols$fn__8178$G__8173__8191.invoke(protocols.clj:13)
taskfeed-datomic  |     at clojure.core.protocols$fn__8236.invoke(protocols.clj:75)                                                                                                        [3165/9184]
taskfeed-datomic  |     at clojure.core.protocols$fn__8178$G__8173__8191.invoke(protocols.clj:13)
taskfeed-datomic  |     at clojure.core$reduce.invokeStatic(core.clj:6886)
taskfeed-datomic  |     at clojure.core$into.invokeStatic(core.clj:6958)
taskfeed-datomic  |     at clojure.walk$walk.invokeStatic(walk.clj:50)
taskfeed-datomic  |     at clojure.walk$prewalk.invokeStatic(walk.clj:65)
taskfeed-datomic  |     at clojure.walk$prewalk.invoke(walk.clj:61)
taskfeed-datomic  |     at ns_272$eval273$fn__274$fn__275.invoke(NO_SOURCE_FILE:93)
taskfeed-datomic  |     at clojure.core$pmap$fn__8552$fn__8553.invoke(core.clj:7089)
taskfeed-datomic  |     at clojure.core$binding_conveyor_fn$fn__5823.invoke(core.clj:2047)
taskfeed-datomic  |     at clojure.lang.AFn.call(AFn.java:18)
taskfeed-datomic  |     at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
taskfeed-datomic  |     at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
taskfeed-datomic  |     at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
taskfeed-datomic  |     at java.base/java.lang.Thread.run(Thread.java:1583)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;On the client side, I get the following error:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;taskfeed-1  | 01:09:47 [clojure-agent-send-off-pool-21] WARN  datomic.connector - {:message &quot;error executing future&quot;, :pid 1, :tid 97} {  }
taskfeed-1  | java.lang.ClassCastException: class java.lang.String cannot be cast to class java.lang.Throwable (java.lang.String and java.lang.Throwable are in module java.base of loader 'bootstrap'
)
taskfeed-1  |   at user$eval172500$fn__172501.invoke(NO_SOURCE_FILE)
taskfeed-1  |   at datomic.error$deserialize_exception.invokeStatic(error.clj:178)
taskfeed-1  |   at datomic.error$deserialize_exception.invoke(error.clj:160)
taskfeed-1  |   at datomic.peer.Connection.notify_error(peer.clj:388)
taskfeed-1  |   at datomic.connector$fn__16648.invokeStatic(connector.clj:154)
taskfeed-1  |   at datomic.connector$fn__16648.invoke(connector.clj:152)
taskfeed-1  |   at clojure.lang.MultiFn.invoke(MultiFn.java:234)
taskfeed-1  |   at datomic.connector$create_hornet_notifier$fn__16654$fn__16655$fn__16659$fn__16660.invoke(connector.clj:178)
taskfeed-1  |   at datomic.connector$create_hornet_notifier$fn__16654$fn__16655$fn__16659.invoke(connector.clj:173)
taskfeed-1  |   at datomic.connector$create_hornet_notifier$fn__16654$fn__16655.invoke(connector.clj:171)
taskfeed-1  |   at clojure.core$binding_conveyor_fn$fn__5823.invoke(core.clj:2047)
taskfeed-1  |   at clojure.lang.AFn.call(AFn.java:18)
taskfeed-1  |   at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
taskfeed-1  |   at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
taskfeed-1  |   at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
taskfeed-1  |   at java.base/java.lang.Thread.run(Thread.java:1583)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And then a few seconds later, it throws the following error:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;taskfeed-1  | Caused by:  :db.error/transaction-timeout Transaction timed out.
taskfeed-1  | clojure.lang.ExceptionInfo: :db.error/transaction-timeout Transaction timed out.                                                                                                        taskfeed-1  | #:db{:error :db.error/transaction-timeout}
taskfeed-1  |  at datomic.error$raise.invokeStatic (error.clj:70)
taskfeed-1  |     datomic.error$raise.invoke (error.clj:58)
taskfeed-1  |     datomic.error$raise.invokeStatic (error.clj:68)
taskfeed-1  |     datomic.error$raise.invoke (error.clj:58)
taskfeed-1  |     datomic.peer$await_tx_result.invokeStatic (peer.clj:79)
taskfeed-1  |     datomic.peer$await_tx_result.invoke (peer.clj:70)
taskfeed-1  |     datomic.peer.Connection.transact (peer.clj:315)
taskfeed-1  |     datomic.api$transact.invokeStatic (api.clj:107)
taskfeed-1  |     datomic.api$transact.doInvoke (api.clj:105)
&lt;/code&gt;&lt;/pre&gt;
</description>
<category>On-Prem</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/965/java-lang-illegalstateexception-cant-index-binding-thread</guid>
<pubDate>Sat, 13 Jan 2024 22:49:31 +0000</pubDate>
</item>
<item>
<title>how to run a dev transactor from the same process as a peer?</title>
<link>https://ask.datomic.com/index.php/964/how-to-run-a-dev-transactor-from-the-same-process-as-a-peer</link>
<description>&lt;p&gt;At scale you definitely want a separate transactor, but for development or for deploying an early prototype , it would be very handy to be able to have the transactor running in the same process as the peer. This would trade reliability and predictability for resource efficiency, and allow deploying on an inexpensive instance somewhere in a public cloud. This would probably lower the bar for trying out datomic in many settings.&lt;/p&gt;
&lt;p&gt;In fact, it seems that &lt;a rel=&quot;nofollow&quot; href=&quot;https://docs.datomic.com/cloud/datomic-local.html&quot;&gt;datomic local&lt;/a&gt; allows having an embedded H2 database and a transactor into the same JVM process as your client.&lt;/p&gt;
&lt;p&gt;You mentioned that it is possible to do the same for datomic on-prem, could you detail how one might do it?&lt;/p&gt;
</description>
<category>On-Prem</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/964/how-to-run-a-dev-transactor-from-the-same-process-as-a-peer</guid>
<pubDate>Wed, 10 Jan 2024 22:30:06 +0000</pubDate>
</item>
<item>
<title>Is it possible to run a transactor within the scope of my application?</title>
<link>https://ask.datomic.com/index.php/957/is-it-possible-run-transactor-within-the-scope-application</link>
<description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;Is it possible to run a transactor from within a Clojure application? I'm trying to gain more control over/feedback about the state of the transactor, and simply shelling out to bin\transactor doesn't seem like a neat solution. I'd also prefer that the end user doesn't have to provide and maintain their own transactor.&lt;/p&gt;
&lt;p&gt;PS, I understand concerns about contention for resources, but what I envision is a simple wrapper application that runs in its own JVM process separate from the rest of my application logic.&lt;/p&gt;
</description>
<category>On-Prem</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/957/is-it-possible-run-transactor-within-the-scope-application</guid>
<pubDate>Sun, 03 Dec 2023 11:52:25 +0000</pubDate>
</item>
<item>
<title>Is it possible to separate Datomic On-Prem from Cloud?</title>
<link>https://ask.datomic.com/index.php/956/is-it-possible-to-separate-datomic-on-prem-from-cloud</link>
<description>&lt;p&gt;I see that AWS-specific jars comprise more than half the size of Datomic install; adding these 300+ jars to the classpath also makes Datomic unusable in Windows due to &quot;input line is too long&quot;.&lt;/p&gt;
&lt;p&gt;As an exclusively On-Prem user, is there any way to omit these unnecessary components and still have a viable Datomic On-Prem transactor? Or have the two capabilities been too-deeply intermingled for this to be possible?&lt;/p&gt;
</description>
<category>On-Prem</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/956/is-it-possible-to-separate-datomic-on-prem-from-cloud</guid>
<pubDate>Sun, 03 Dec 2023 11:48:45 +0000</pubDate>
</item>
<item>
<title>Database functions, Classpath functions, and Transaction functions</title>
<link>https://ask.datomic.com/index.php/948/database-functions-classpath-functions-transaction-functions</link>
<description>&lt;p&gt;Datomic Pro documentation, reference/database functions states:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;You can deploy code to a Datomic system by installing database functions into a Datomic database, or by adding classpath functions to the Java classpath. Both database functions and classpath functions can be used as transaction functions that run inside a transaction to enforce arbitrary data invariants.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I understand that either kind &quot;can be used as&quot; a transaction function.&lt;br&gt;
But in reality is this the only way either is used in practice?   &lt;/p&gt;
&lt;p&gt;I've been trying to unfangle what an implied other kind (that isn't used as a transaction function) could be and haven't found any examples.&lt;/p&gt;
&lt;p&gt;So the conditions regarding taking the db value as first argument, and being pure function, actually apply to every function, whether database or classpath, that we may write?&lt;/p&gt;
</description>
<category>On-Prem</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/948/database-functions-classpath-functions-transaction-functions</guid>
<pubDate>Wed, 01 Nov 2023 08:56:45 +0000</pubDate>
</item>
<item>
<title>Is there way to use s3 compatible backup storage</title>
<link>https://ask.datomic.com/index.php/946/is-there-way-to-use-s3-compatible-backup-storage</link>
<description>&lt;p&gt;We use google cloud and managing the backup persistent disks is not a huge burden but still less than ideal. Google cloud storage offers s3 compatible storage, but we would need to know how to provide their endpoint in the URI. &lt;/p&gt;
</description>
<category>On-Prem</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/946/is-there-way-to-use-s3-compatible-backup-storage</guid>
<pubDate>Mon, 16 Oct 2023 18:17:34 +0000</pubDate>
</item>
<item>
<title>Support for DynamoDB compatible services</title>
<link>https://ask.datomic.com/index.php/898/support-for-dynamodb-compatible-services</link>
<description>&lt;p&gt;Hi!&lt;br&gt;
There is a DynamoDB compatible service called &lt;a rel=&quot;nofollow&quot; href=&quot;https://ydb.tech/&quot;&gt;YDB&lt;/a&gt;.&lt;br&gt;
&lt;a rel=&quot;nofollow&quot; href=&quot;https://cloud.yandex.com/en/services/ydb&quot;&gt;YDB in the Yandex Cloud&lt;/a&gt;  has a serverless mode with &lt;a rel=&quot;nofollow&quot; href=&quot;https://cloud.yandex.com/en/docs/ydb/docapi/tools/aws-setup&quot;&gt;DynamoDB support.&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;So I have:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;AWS_ACCESS_KEY_ID&lt;/li&gt;
&lt;li&gt;AWS_SECRET_KEY&lt;/li&gt;
&lt;li&gt;region: ru-central1&lt;/li&gt;
&lt;li&gt;endpoint like &lt;code&gt;https://docapi.serverless.yandexcloud.net/ru-central1/b1gia87mbaomkfvs6rgl/etnudu2n9ri35luqe4h1&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I have tried using the ddb and ddb-local protocols with different settings.&lt;/p&gt;
&lt;p&gt;Variants of &lt;code&gt;aws-dynamodb-override-endpoint&lt;/code&gt;&lt;br&gt;
 1. &lt;code&gt;docapi.serverless.yandexcloud.net/ru-central1/.../...&lt;/code&gt;&lt;br&gt;
 2. &lt;code&gt;docapi.serverless.yandexcloud.net:443/ru-central1/.../...&lt;/code&gt;&lt;br&gt;
 3. &lt;code&gt;https://docapi.serverless.yandexcloud.net/ru-central1/.../...&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ bin/datomic ensure-transactor config/ddb.properties config/ddb-gen.properties
java.lang.IllegalArgumentException: java.net.URISyntaxException: Illegal character in authority at index 7: http://&quot;https://docapi.serverless.yandexcloud.net/ru-central1/b1g31q09ln3ca15cg5mf/etnckvjnbskiko1s639l&quot;
	at com.amazonaws.util.RuntimeHttpUtils.toUri(RuntimeHttpUtils.java:216)
	at com.amazonaws.util.RuntimeHttpUtils.toUri(RuntimeHttpUtils.java:190)
	at com.amazonaws.AmazonWebServiceClient.toURI(AmazonWebServiceClient.java:329)
	at com.amazonaws.AmazonWebServiceClient.setEndpoint(AmazonWebServiceClient.java:317)
	at datomic.ddb$client.invokeStatic(ddb.clj:14)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I think that ddb-local always uses http protocol and there is no way to configure it with https.&lt;/p&gt;
&lt;p&gt;There are some &lt;a rel=&quot;nofollow&quot; href=&quot;https://cloud.yandex.com/en/docs/ydb/docapi/tools/aws-sdk/create-table&quot;&gt;examples&lt;/a&gt; of using AwsSDK with YDB in Yandex cloud&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;AmazonDynamoDB client = AmazonDynamoDBClientBuilder.standard()
          .withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration(&quot;&amp;lt;Document API endpoint&amp;gt;&quot;, &quot;ru-central1&quot;))
          .build();
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Could you add support for DynamoDB compatible services?&lt;br&gt;
Could it be the new `aws-dynamodb-override-protocol' setting, which is by default 'http' ?&lt;/p&gt;
</description>
<category>On-Prem</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/898/support-for-dynamodb-compatible-services</guid>
<pubDate>Thu, 11 May 2023 12:18:56 +0000</pubDate>
</item>
<item>
<title>Why is this error message saying the entity can't be resolved?</title>
<link>https://ask.datomic.com/index.php/897/why-is-this-error-message-saying-the-entity-cant-be-resolved</link>
<description>&lt;p&gt;Here is the error message:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cognitect.anomalies/message: &quot;Unable to resolve entity: 1.7592186046217E13 in datom [\&quot;shape_VVVVVVVVVVVVVVVV_0_1\&quot; :shape/source-shape 1.7592186046217E13]&quot;
                           datom: [&quot;shape_VVVVVVVVVVVVVVVV_0_1&quot; :shape/source-shape 1.7592186046217E13]
                        db/error: :db.error/not-an-entity
                             dbs: [{:database-id
                                    &quot;datomic:dev://datomic-transactor:4334/blah&quot;,
                                    :t 1818,
                                    :next-t 1819,
                                    :history false}]
                          entity: 1.7592186046217E13
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I can query for the :db/id 17592186046217, so I know it exists. My question is why can't Datomic find it? There's only one transaction and it failed, so it is guaranteed that entity 17592186046217 existed before the transaction as well.&lt;/p&gt;
&lt;p&gt;This is the schema for &lt;code&gt;:shape/source-shape&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{:db/ident :shape/source-shape
 :db/valueType :db.type/ref  
 :db/cardinality :db.cardinality/one}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The version of Datomic is &lt;code&gt;datomic-pro-1.0.6269&lt;/code&gt;.&lt;/p&gt;
</description>
<category>On-Prem</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/897/why-is-this-error-message-saying-the-entity-cant-be-resolved</guid>
<pubDate>Thu, 04 May 2023 22:53:42 +0000</pubDate>
</item>
<item>
<title>What defines a datomic on-prem system?</title>
<link>https://ask.datomic.com/index.php/883/what-defines-a-datomic-on-prem-system</link>
<description>&lt;p&gt;The price for an on-prem pro license is for one system. What defines a system? Does a single system include a transactor, a stand-by transactor and multiple peers?&lt;/p&gt;
</description>
<category>On-Prem</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/883/what-defines-a-datomic-on-prem-system</guid>
<pubDate>Wed, 29 Mar 2023 20:55:33 +0000</pubDate>
</item>
<item>
<title>Is it possible for Datomic On-prem to get the storage credentials from Secrets Manager or similar software?</title>
<link>https://ask.datomic.com/index.php/873/possible-datomic-storage-credentials-manager-similar-software</link>
<description>&lt;p&gt;Is there a way to run the transactor service without storing the credentials to disk?&lt;/p&gt;
</description>
<category>On-Prem</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/873/possible-datomic-storage-credentials-manager-similar-software</guid>
<pubDate>Thu, 02 Mar 2023 10:50:19 +0000</pubDate>
</item>
<item>
<title>equality on d/entity ignores db</title>
<link>https://ask.datomic.com/index.php/859/equality-on-d-entity-ignores-db</link>
<description>&lt;p&gt;Expected: entity object equality semantics to consider their database value in determining equality, such that entities derived from differing database values are not equal&lt;/p&gt;
&lt;p&gt;Observed: entities derived from inconsistent database values are considered equal.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(def edward 694891374557546)
(def db2 (:db-after (d/with test/datomic-db [[:db/add edward :google/display-name &quot;a&quot;]])))
(= (d/entity test/datomic-db edward) (d/entity db2 edward)) ; true
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Why we care: when using Datomic entity API with a reactive dataflow engine, the reactive engine uses &lt;code&gt;= &lt;/code&gt; to detect dirty expressions to schedule reevaluation, and here, two very different entity values are considered equal causing the reactive engine to incorrectly cache the expression without reevaluating (i.e. reuse a buffered prior instance of the entity that is inconsistent with the latest db).&lt;/p&gt;
&lt;p&gt;also see &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/tonsky/datascript/issues/433&quot;&gt;https://github.com/tonsky/datascript/issues/433&lt;/a&gt; – Datascript had the same bug. &lt;/p&gt;
&lt;p&gt;Impl note: false negatives are not an issue (i.e. in the case of two equal database values that are not identical references, returning a false negative here may be acceptable, resulting in imperfect caching but no visibly broken behavior in user apps)&lt;/p&gt;
</description>
<category>On-Prem</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/859/equality-on-d-entity-ignores-db</guid>
<pubDate>Sun, 20 Nov 2022 20:49:46 +0000</pubDate>
</item>
<item>
<title>Hi guys, I need to retrieve id's from all users in database that are older then 30 days, every user has creation date.</title>
<link>https://ask.datomic.com/index.php/728/retrieve-users-database-that-older-days-every-user-creation</link>
<description>&lt;p&gt;Hi guys,&lt;br&gt;
I need to retrieve id's from all users in database that are older then 30 days, every user has creation date.,&lt;br&gt;
(let [conn (client/get-conn)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;  db (client/db)
  last-month (t/minus (t/now) (t/month 1))
  q '{:find  [(pull ?eid [*])]
      :where [[?eid :user/created]]}]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;  ;;.............&lt;br&gt;
  )&lt;br&gt;
I have last-month #inst date, I just dont know how to get all users &quot;older&quot; then 30 days.&lt;br&gt;
I am new in datomic so,&lt;br&gt;
if someone can help, thank you in advance...&lt;/p&gt;
</description>
<category>On-Prem</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/728/retrieve-users-database-that-older-days-every-user-creation</guid>
<pubDate>Mon, 01 Aug 2022 22:13:08 +0000</pubDate>
</item>
<item>
<title>How to add new entities (as references) to the many attribute of an existing entity?</title>
<link>https://ask.datomic.com/index.php/726/how-add-entities-references-many-attribute-existing-entity</link>
<description>&lt;p&gt;By way of example I'm going to use a drawing as the existing entity which is to have two new shapes added to it. This is the tx that is failing:&lt;br&gt;
&lt;code&gt;[{:shape/id &quot;BKF806TXXTAFWII0&quot;, :db/id &quot;22NF08ZVGH9N7QGG_0&quot;}
 {:shape/id &quot;YKIZU4CJC0JXJKVQ&quot;, :db/id &quot;22NF08ZVGH9N7QGG_1&quot;}
 [:db/add 17592186047451 :drawing/shapes [&quot;22NF08ZVGH9N7QGG_0&quot; &quot;22NF08ZVGH9N7QGG_1&quot;]]]&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;As you can see the existing drawing has &lt;code&gt;:db/id&lt;/code&gt; of 17592186047451. I'm trying to create two new shapes and add them to the many cardinality attribute &lt;code&gt;:drawing/shapes&lt;/code&gt;. &quot;22NF08ZVGH9N7QGG_0&quot; and &quot;22NF08ZVGH9N7QGG_1&quot; are tempids that are supposed to be translated to the same new &lt;code&gt;:db/id&lt;/code&gt;s wherever they appear.&lt;/p&gt;
&lt;p&gt;I should say that the drawing doesn't have any existing shapes. If it did I would expect them to be orphaned.&lt;/p&gt;
&lt;p&gt;This is the error message I'm getting:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Execution error (ExceptionInfo) at datomic.client.api.async/ares (async.clj:58).&lt;br&gt;
Cannot interpret as a keyword: 22NF08ZVGH9N7QGG_0, no leading :&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Something similar I've also tried:&lt;br&gt;
&lt;code&gt;[{:shape/id &quot;9HTL5BMMHT6QUJM6&quot;, :db/id &quot;22NF08ZVGH9N7QGG_0&quot;}
 {:shape/id &quot;O5UB9IG9UB8KDVA2&quot;, :db/id &quot;22NF08ZVGH9N7QGG_1&quot;}
 [:db/add 17592186047451 :drawing/shapes &quot;22NF08ZVGH9N7QGG_0&quot;]
 [:db/add 17592186047451 :drawing/shapes &quot;22NF08ZVGH9N7QGG_1&quot;]]&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Gives this error message:&lt;br&gt;
&lt;strong&gt;Execution error (ExceptionInfo) at datomic.client.api.async/ares (async.clj:58).&lt;br&gt;
Two datoms in the same transaction conflict&lt;br&gt;
{:d1&lt;br&gt;
 [17592186047451 :drawing/shapes 17592186049126 13194139538021 true],&lt;br&gt;
 :d2&lt;br&gt;
 [17592186047451 :drawing/shapes 17592186049127 13194139538021 true]}&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This gives the same error message as the first attempt:&lt;br&gt;
&lt;code&gt;[{:db/id 17592186047451, :drawing/shapes [&quot;22NF08ZVGH9N7QGG_0&quot; &quot;22NF08ZVGH9N7QGG_1&quot;]}
 {:shape/id &quot;3DZYWHEPQIAELF25&quot;, :db/id &quot;22NF08ZVGH9N7QGG_0&quot;}
 {:shape/id &quot;GJ804SOOU36YQX6Y&quot;, :db/id &quot;22NF08ZVGH9N7QGG_1&quot;}]&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Getting rid of the tempids by doing it in a nested way:&lt;br&gt;
&lt;code&gt;[{:db/id 17592186047451,
  :drawing/shapes
  [{:shape/id &quot;GEMRMRFG0E6N262M&quot;}
   {:shape/id &quot;HTH2C7R90BQFFNXT&quot;}]}]&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Just yields this error message:&lt;br&gt;
&lt;strong&gt;Execution error (ExceptionInfo) at datomic.client.api.async/ares (async.clj:58).&lt;br&gt;
Unable to resolve entity: {:shape/id &quot;GEMRMRFG0E6N262M&quot;}&lt;/strong&gt;&lt;/p&gt;
</description>
<category>On-Prem</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/726/how-add-entities-references-many-attribute-existing-entity</guid>
<pubDate>Wed, 27 Jul 2022 19:01:04 +0000</pubDate>
</item>
<item>
<title>How do you visualize your schema ?</title>
<link>https://ask.datomic.com/index.php/725/how-do-you-visualize-your-schema</link>
<description>&lt;p&gt;Hi I made a quick search in this channel to find tools for visualizing Datomic schema. The most promising tool I found was  &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/hodur-org/hodur-datomic-schema&quot;&gt;Hodur Datomic Schema&lt;/a&gt;. This is nice because you can create entity types and connect them through attributes. I would like to share with you an example I made. Here is a simple Datomic Schema in &lt;a rel=&quot;nofollow&quot; href=&quot;https://gist.github.com/athanhat/bb581d77cfe224c144a19ea4940f406f&quot;&gt;Hodur Descriptive Domain Modeling Engine EDN format&lt;/a&gt; and here is my &lt;a rel=&quot;nofollow&quot; href=&quot;https://gist.github.com/athanhat/7aa53c54110cc3258ba52e00128a065c&quot;&gt;clojure gist&lt;/a&gt; to run and output the result. There is a better Hodur schema visualization using GoJS library but I have not figured out yet how to make the http web server to work with the Hodur visualizer clojurescript it seems users have issues with it.&lt;/p&gt;
&lt;p&gt;OK that said, I am aware that in Clojure you are trying to break away from entity types, object types in general and work with attribute oriented modeling. But the way you are modeling schema you cannot escape from namespace prefixes and these imply entity types. In any case it is standard practice in any significant large IT project that users want to see and work easily on a white-board with some kind of graph data model that represents an abstract data model. That was the scope of Hodur I guess. In the RDBMs world and more recently in Graph DBMS there are great tools to visualize both the schema and data.  So how do you visualize the data modeling process and it's evolution in large projects using Datomic ?&lt;/p&gt;
&lt;p&gt;I had a quick look at schema-cartographer.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It creates schema-cartographer dependent edn files when you download schema transactions and schema files from their Web APP UI (see schema.edn) and (schema-txs.edn)&lt;/li&gt;
&lt;li&gt;You have to work everything on the UI. But I think you cannot download and run this independently on your premises.&lt;/li&gt;
&lt;li&gt;There is this Create a schema file for an existing annotated ON PREM database from a REPL but again you have to load the resulting output file in the UI that resides at &lt;a rel=&quot;nofollow&quot; href=&quot;https://schema-cartographer.com&quot;&gt;https://schema-cartographer.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;It is not flexible enough and it will result in poor visualization when you have a big schema and/or you want to view part of the schema&lt;/li&gt;
&lt;li&gt;The schema-cartographer UI says GoJS 2.0 evaluation (c) 1998-2019 Northwoods Software Not for distribution or production use gojs.net&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So what tool Cognitect people use to visualize Datomic schema. Is that the tool ?&lt;/p&gt;
</description>
<category>On-Prem</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/725/how-do-you-visualize-your-schema</guid>
<pubDate>Fri, 08 Jul 2022 15:58:59 +0000</pubDate>
</item>
<item>
<title>Is using entid function to resolve lookup refs a supported behaviour?</title>
<link>https://ask.datomic.com/index.php/721/using-entid-function-resolve-lookup-refs-supported-behaviour</link>
<description>&lt;p&gt;I'm using &lt;code&gt;datomic.api/entid&lt;/code&gt; to resolve a lookup ref to an entity ID, like&lt;br&gt;
&lt;code&gt;$ (entid db [:user/id &quot;test@test.com&quot;])
17592186045432&lt;/code&gt;&lt;br&gt;
This works fine, but a colleague pointed out this is not a documented behaviour.&lt;br&gt;
&amp;gt;Usage: (entid db ident)&lt;br&gt;
&amp;gt;Returns the entity id associated with a symbolic keyword, or the id&lt;br&gt;
itself if passed.&lt;/p&gt;
&lt;p&gt;Is this a gap in documentation, or is this behaviour accidental and not recommended to rely on?&lt;/p&gt;
</description>
<category>On-Prem</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/721/using-entid-function-resolve-lookup-refs-supported-behaviour</guid>
<pubDate>Wed, 08 Jun 2022 13:30:29 +0000</pubDate>
</item>
<item>
<title>Transactor timeout on transaction function throw</title>
<link>https://ask.datomic.com/index.php/718/transactor-timeout-on-transaction-function-throw</link>
<description>&lt;h3&gt;Version&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;com.datomic/datomic-pro &quot;1.0.6242&quot;&lt;/li&gt;
&lt;li&gt;transactor process 0.9.6045&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Setup&lt;/h3&gt;
&lt;p&gt;Given the following transaction function definition:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(d/transact
 *conn*
 [{:db/ident :demo-throw-fn
   :db/fn (d/function
           {:lang &quot;clojure&quot;
            :params '[db]
            :code '(throw (ex-info &quot;demo&quot; {:type (type #{:one})}))})}])
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Execute the transaction function in two environments:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;A local environment&lt;/li&gt;
&lt;li&gt;An environment where the transactor runs in a separate process&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Expectation&lt;/h3&gt;
&lt;p&gt;Regardless of the environment, transaction function runtime errors are thrown.&lt;/p&gt;
&lt;h3&gt;Actual&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;In a local environment, execution of the demo function indeed throws an error - in line with expectations.&lt;/li&gt;
&lt;li&gt;In an environment where the transactor runs in a separate process, the transactor times out.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Additional Notes&lt;/h3&gt;
&lt;p&gt;The &lt;em&gt;hypothesis&lt;/em&gt; for the timeout is a second error occurs due to the&lt;br&gt;
&lt;code&gt;(type #{:one})&lt;/code&gt; expression's result not being serializable. Unfortunately, the timeout error does not reveal what was likely known at some point during execution.&lt;/p&gt;
</description>
<category>On-Prem</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/718/transactor-timeout-on-transaction-function-throw</guid>
<pubDate>Fri, 27 May 2022 17:54:06 +0000</pubDate>
</item>
<item>
<title>Inconsistent return value using set?</title>
<link>https://ask.datomic.com/index.php/717/inconsistent-return-value-using-set</link>
<description>&lt;h3&gt;Version&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;com.datomic/datomic-pro &quot;1.0.6242&quot;&lt;/li&gt;
&lt;li&gt;transactor process 0.9.6045&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Setup&lt;/h3&gt;
&lt;p&gt;Given the following transaction function definition.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(d/transact
 *conn*
 [{:db/ident :demo-fn
   :db/fn (d/function
           {:lang &quot;clojure&quot;
            :params '[db]
            :code '(set? #{:one})})}])
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Execute the transaction function in two environments:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;A local environment&lt;/li&gt;
&lt;li&gt;An environment where the transactor runs in a separate process&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Expectation&lt;/h3&gt;
&lt;p&gt;Regardless of the environment, the return value of &lt;code&gt;set?&lt;/code&gt; is consistent.&lt;/p&gt;
&lt;h3&gt;Actual&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;In a local environment, the function returns &lt;code&gt;true&lt;/code&gt; - as expected.&lt;/li&gt;
&lt;li&gt;In an environment where the transactor runs in a separate process, the function returns &lt;code&gt;false&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Additional Notes&lt;/h3&gt;
&lt;p&gt;The data type of a set is different in the two environments,&lt;br&gt;
&lt;code&gt;clojure.lang.PersistentHashSet&lt;/code&gt; in local and &lt;code&gt;java.util.HashSet&lt;/code&gt; in the other.&lt;/p&gt;
</description>
<category>On-Prem</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/717/inconsistent-return-value-using-set</guid>
<pubDate>Fri, 27 May 2022 17:51:40 +0000</pubDate>
</item>
<item>
<title>Advice on CVEs of h2 version 1.3.171</title>
<link>https://ask.datomic.com/index.php/713/advice-on-cves-of-h2-version-1-3-171</link>
<description>&lt;p&gt;Using &lt;code&gt;com.datomic/datomic-pro&lt;/code&gt; version &quot;1.0.6362&quot; brings in a transitive dependency on &lt;code&gt;com.h2database/h2&lt;/code&gt; version &quot;1.3.171&quot;  (on-prem).&lt;/p&gt;
&lt;p&gt;The latter suffers from various CVEs:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2021-23463&quot;&gt;CVE-2021-23463&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2021-42392&quot;&gt;CVE-2021-42392&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2022-23221&quot;&gt;CVE-2022-23221&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;(c.f. &lt;a rel=&quot;nofollow&quot; href=&quot;https://mvnrepository.com/artifact/com.h2database/h2/1.3.171&quot;&gt;mvnrepository.com/artifact/com.h2database/h2/1.3.171&lt;/a&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Is a Datomic upgrade planned to resolve this?&lt;/li&gt;
&lt;li&gt;If not and in the meantime, can you give any advice on how to deal with this? In particular:&lt;/li&gt;
&lt;li&gt;Can you give detailed advice on whether these vulnerabilities actually do or do not constitute a security risk?&lt;br&gt;
3.1 Some of the CVEs mention h2 console as part of an attack vector, and I have heard this would not apply to Datomic. However, I have not found official information on this. Moreover, if I understood correctly, there are other attack vectors. Please advise.&lt;br&gt;
3.2 The first linked CVE is a SQLXML XXE. It seems like this would not apply as long as &lt;code&gt;getSQLXML&lt;/code&gt; is not called, but this is just my impression and I do not know about usage in Datomic. Please advise.&lt;/li&gt;
&lt;li&gt;Do you have any advice on overriding the h2 dependency with an h2 version not suffering from these CVEs, say version &quot;2.1.210&quot;? As this a major upgrade, I expect problems. In particular, I expect migrating existing h2 databases to be problematic.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Thank you very much for your assistance.&lt;/p&gt;
</description>
<category>On-Prem</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/713/advice-on-cves-of-h2-version-1-3-171</guid>
<pubDate>Tue, 05 Apr 2022 16:21:32 +0000</pubDate>
</item>
<item>
<title>Retrieving tx from a entity - attribute pair without doing a query on history db</title>
<link>https://ask.datomic.com/index.php/693/retrieving-from-entity-attribute-without-doing-query-history</link>
<description>&lt;p&gt;Given an entity and one of its attributes, is there a way to see the tx that added it without doing a query on history db?&lt;/p&gt;
&lt;p&gt;i.e. something other than&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(d/q
       '[:find ?tx ?attr ?val ?added
         :in $ ?e
         :where
         [?e ?attr ?val ?tx ?added]]
       (d/history my-db)
       my-eid)
&lt;/code&gt;&lt;/pre&gt;
</description>
<category>On-Prem</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/693/retrieving-from-entity-attribute-without-doing-query-history</guid>
<pubDate>Fri, 07 Jan 2022 10:09:22 +0000</pubDate>
</item>
<item>
<title>Why is :db.unique/identity only allowed on :db.cardinality/one?</title>
<link>https://ask.datomic.com/index.php/690/why-is-db-unique-identity-only-allowed-on-db-cardinality-one</link>
<description>&lt;p&gt;I'm curious about the rationale for only allowing :db.cardinality/one attributes to be :db.unique/identity? An immediate use case in the wild is email addresses, which uniquely identify an individual but an individual can have many email addresses.&lt;/p&gt;
</description>
<category>On-Prem</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/690/why-is-db-unique-identity-only-allowed-on-db-cardinality-one</guid>
<pubDate>Tue, 21 Dec 2021 18:21:49 +0000</pubDate>
</item>
<item>
<title>Can I run recent versions of Datomic in Windows?</title>
<link>https://ask.datomic.com/index.php/662/can-i-run-recent-versions-of-datomic-in-windows</link>
<description>&lt;p&gt;I'm not sure if Windows is (or ever was?) a supported platform for Datomic On-Prem, but at the moment when I try to start a REPL, transactor, or peer server in any recent version I get:&lt;/p&gt;
&lt;p&gt;&quot;The input line is too long. The syntax of the command is incorrect.&quot;&lt;/p&gt;
&lt;p&gt;My Datomic path is short (C:\Datomic). I'm guessing the error results from classpath.cmd trying to build a CP_LIST that comprises all 400+ files in lib, though this behaviour is consistent as far back as 0.9.5927, which only has 240 jars in lib; things work as expected in 0.9.5786 (which has 232 jars) and earlier.&lt;/p&gt;
&lt;p&gt;I'd rather not use WSL/Docker etc. at this time - can anyone advise if there's a native solution that will allow me to use a version more recent than 2018?&lt;/p&gt;
</description>
<category>On-Prem</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/662/can-i-run-recent-versions-of-datomic-in-windows</guid>
<pubDate>Tue, 31 Aug 2021 23:31:45 +0000</pubDate>
</item>
<item>
<title>Retracting entities, including tuples with refs</title>
<link>https://ask.datomic.com/index.php/660/retracting-entities-including-tuples-with-refs</link>
<description>&lt;p&gt;In my schema I have attributes of type tuple that has :db.type/ref as one of the tuple's types.&lt;br&gt;
My usecase is maintaining a set of ordered to-many relations.&lt;/p&gt;
&lt;p&gt;When I retract an entity using :db/retractEntity, the tuple attrs that refer to the retracted entity still remain, continuing to refer to a now non-existent entity.&lt;br&gt;
I'm not sure whether this is the intended behaviour, and if so, what would be a standard approach to clean up these tuples? My intention would be for these tuples to be completely redacted. As I'm using this in a cardinality-many setup, I'd expect the attribute to retain all tuple values, except the one that does include the ref to the retracted entity in any position.&lt;br&gt;
Should I be writing a custom retractEntity-like transaction function?&lt;br&gt;
Thanks!&lt;/p&gt;
</description>
<category>On-Prem</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/660/retracting-entities-including-tuples-with-refs</guid>
<pubDate>Tue, 31 Aug 2021 13:36:44 +0000</pubDate>
</item>
<item>
<title>Renaming attribute best practice in development</title>
<link>https://ask.datomic.com/index.php/635/renaming-attribute-best-practice-in-development</link>
<description>&lt;p&gt;Assume I have a &lt;code&gt;schema.clj&lt;/code&gt; which contains my datomic schema.&lt;/p&gt;
&lt;p&gt;Every time I start the application (in development and in production) this schema is transacted so whatever has been added gets correctly transacted too. Now, some time ago I installed a new attribute &lt;/p&gt;
&lt;p&gt;&lt;code&gt;{:db/ident :foo/bar ...}&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;now after a few weeks turns out that I want to rename this attribute &lt;code&gt;:alice/bob&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Following the &lt;a rel=&quot;nofollow&quot; href=&quot;https://docs.datomic.com/on-prem/schema/schema-change.html#renaming-an-identity&quot;&gt;documentation of datomic&lt;/a&gt; i'm supposed to transact &lt;/p&gt;
&lt;p&gt;&lt;code&gt;{:db/id :foo/bar :db/ident :alice/bob}&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;but that clearly doesn't work in development as &lt;code&gt;:foo/bar&lt;/code&gt; isn't yet defined when i start my system (the whole schema is transacted at once in the same transaction) but would work on a running system with the attribute already installed. &lt;/p&gt;
&lt;p&gt;How do you handle these cases?&lt;/p&gt;
</description>
<category>On-Prem</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/635/renaming-attribute-best-practice-in-development</guid>
<pubDate>Thu, 24 Jun 2021 08:34:10 +0000</pubDate>
</item>
<item>
<title>Long blocking on event `:kv-cluster/get-val` without timeout/retry/failover semantics?</title>
<link>https://ask.datomic.com/index.php/631/blocking-event-cluster-without-timeout-failover-semantics</link>
<description>&lt;p&gt;On a test environment, we're seeing this kind of log from the Datomic Peer:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;;; ~5 hours CI inactive (if this is relevant)

DEBUG 2021-06-18T13:32:37.702 [clojure-agent-send-off-pool-23]: {:event :kv-cluster/get-val, :val-key &quot;60a4cc9e-ac11-40fe-9bd0-582f8209a403&quot;, :phase :begin, :pid 7, :tid 225}

;; 15 minutes pass....

DEBUG 2021-06-18T13:48:25.091 [clojure-agent-send-off-pool-23]: {:event :kv-cluster/get-val, :val-key &quot;60a4cc9e-ac11-40fe-9bd0-582f8209a403&quot;, :msec 947000.0, :phase :end, :pid 7, :tid 225}

;; This next one finishes in 21ms:

DEBUG 2021-06-18T13:48:25.094 [clojure-agent-send-off-pool-23]: {:event :kv-cluster/get-val, :val-key &quot;60128f6d-25fb-41f0-a6c2-9c5e73267da7&quot;, :phase :begin, :pid 7, :tid 225}
DEBUG 2021-06-18T13:48:25.115 [clojure-agent-send-off-pool-23]: {:event :kv-cluster/get-val, :val-key &quot;60128f6d-25fb-41f0-a6c2-9c5e73267da7&quot;, :msec 21.0, :phase :end, :pid 7, :tid 225}

;; and now we start processing the transacts that queued up when the tests started...

INFO  2021-06-18T13:48:25.117 [manifold-execute-43]: {:event :peer/transact, :uuid #uuid &quot;60cca429-7908-49b1-82c8-56b50effb4ce&quot;, :phase :start, :pid 7, :tid 282}
DEBUG 2021-06-18T13:48:25.234 [clojure-agent-send-off-pool-24]: {:event :peer/accept-new, :id #uuid &quot;60cca429-7908-49b1-82c8-56b50effb4ce&quot;, :phase :begin, :pid 7, :tid 226}
DEBUG 2021-06-18T13:48:25.234 [clojure-agent-send-off-pool-24]: {:event :peer/accept-new, :id #uuid &quot;60cca429-7908-49b1-82c8-56b50effb4ce&quot;, :msec 0.462, :phase :end, :pid 7, :tid 226}
INFO  2021-06-18T13:48:25.235 [clojure-agent-send-off-pool-24]: {:event :peer/transact, :uuid #uuid &quot;60cca429-7908-49b1-82c8-56b50effb4ce&quot;, :phase :end, :pid 7, :tid 226}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;After those 15 minutes of waiting, the peer moved on and transacted all the transactions that happened to queue in the meantime, as if nothing happened. There do not seem to be any interesting or anomalous logs in the Transactor for this time period.&lt;/p&gt;
&lt;p&gt;Datomic Peer (1.0.6269) with PostgreSQL storage. The peer and transactor are both running on Kubernetes, but Postgres is hosted outside of the k8s cluster.&lt;/p&gt;
&lt;p&gt;I think my followup questions are:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Any idea what could be going on with the &lt;code&gt;:kv-cluster/get-val&lt;/code&gt; and how to go about debugging this further?&lt;/li&gt;
&lt;li&gt;Is there some timeout we can configure to avoid this kind of situation in a production environment?&lt;/li&gt;
&lt;li&gt;Is the probable culprit Kubernetes? If so, has someone seen or fixed similar behavior before?&lt;/li&gt;
&lt;li&gt;These logs are happening at the DEBUG level, otherwise we would not even know that the Peer was blocking/hanging/waiting. Are there other metrics or logs we should be monitoring to identify this kind of problem?&lt;/li&gt;
&lt;/ol&gt;
</description>
<category>On-Prem</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/631/blocking-event-cluster-without-timeout-failover-semantics</guid>
<pubDate>Wed, 23 Jun 2021 09:19:28 +0000</pubDate>
</item>
<item>
<title>Do Peers work with Java 11?</title>
<link>https://ask.datomic.com/index.php/625/do-peers-work-with-java-11</link>
<description>&lt;p&gt;I have read that Transactors require Java 8 – c.f. &lt;a rel=&quot;nofollow&quot; href=&quot;https://forum.datomic.com/t/java-11-0-1-ssl-exception/734&quot;&gt;https://forum.datomic.com/t/java-11-0-1-ssl-exception/734&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In the Changelog (Datomic Free 0.9.5703) I have read that&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Transactors [...] require Java 7 or&lt;br&gt;
later.  (Peers continue to work with Java 6 or later.)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;and, as of 1.0.6165,&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;The transactor and peer now require Java 1.8 or greater, &lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;while the Docs state that&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Datomic requires the Java 8 JDK,&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;see &lt;a rel=&quot;nofollow&quot; href=&quot;https://docs.datomic.com/on-prem/getting-started/get-datomic.html&quot;&gt;https://docs.datomic.com/on-prem/getting-started/get-datomic.html&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Is Java 11 supported on Peers? &lt;/p&gt;
</description>
<category>On-Prem</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/625/do-peers-work-with-java-11</guid>
<pubDate>Wed, 09 Jun 2021 08:12:11 +0000</pubDate>
</item>
<item>
<title>Does the transactor eagerly fill memcached with indexed segments?</title>
<link>https://ask.datomic.com/index.php/605/does-transactor-eagerly-fill-memcached-with-indexed-segments</link>
<description>&lt;p&gt;The datomic &lt;a rel=&quot;nofollow&quot; href=&quot;https://docs.datomic.com/on-prem/overview/caching.html#memcached&quot;&gt;transactor memcached documentation&lt;/a&gt; says this:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;When configured to used memcached, a Datomic process will automatically write into memcached any segment it needs that is not already present in memcached. &lt;strong&gt;In addition, the transactor (only) will write index and log segments to memcached as the segments are produced.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;(Emphasis mine.)&lt;/p&gt;
&lt;p&gt;Based on this sentence and assuming a memcached memory pool larger than the storage size that is shared by transactor and peer, my expectation is the following:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;As the transactor is building an index, it writes newly-created index segments to storage &lt;em&gt;and&lt;/em&gt; to memcached at roughly the same time.&lt;/li&gt;
&lt;li&gt;When the index is finished, it commits the new index root and informs all peers of the new index.&lt;/li&gt;
&lt;li&gt;Any peers using the &lt;em&gt;same&lt;/em&gt; memcached cluster should, at the moment the index is released:&lt;ul&gt;
&lt;li&gt;have a &lt;em&gt;decreasing&lt;/em&gt; ObjectCache hitrate because newly-indexed segments are not cached&lt;/li&gt;
&lt;li&gt;but an &lt;em&gt;increasing&lt;/em&gt; memcached GET count&lt;/li&gt;
&lt;li&gt;and a flat StorageGet and MemcachedPut count because the segments are already in memcached&lt;/li&gt;
&lt;li&gt;For an overall flat or increasing memcached hitrate.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Instead, what I actually see is that when peers accept a new index,&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;there's a &lt;em&gt;dramatic&lt;/em&gt; decrease in Memcached hitrate&lt;/li&gt;
&lt;li&gt;and increase in MemcachedPut counts and Storage Get counts.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;IndexWrite&lt;/code&gt; count reported by the transactor is very similar to the MemcachedPut count reported by the peer.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This behavior is consistent with the transactor &lt;em&gt;not&lt;/em&gt; writing newly-indexed segments into memcached eagerly while indexing, which is contrary to the documentation.&lt;/p&gt;
&lt;p&gt;So the question: &lt;strong&gt;Does the transactor &lt;em&gt;really&lt;/em&gt; write index segments to memcached as it is indexing?&lt;/strong&gt;&lt;/p&gt;
</description>
<category>On-Prem</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/605/does-transactor-eagerly-fill-memcached-with-indexed-segments</guid>
<pubDate>Wed, 07 Apr 2021 15:21:18 +0000</pubDate>
</item>
<item>
<title>“Error communicating with HOST localhost on PORT 4334” on fresh install of 1.0.6165</title>
<link>https://ask.datomic.com/index.php/588/error-communicating-with-host-localhost-port-fresh-install</link>
<description>&lt;p&gt;Works on other laptops... just not this one.  Brought our coding session to grinding halt.  &lt;/p&gt;
</description>
<category>On-Prem</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/588/error-communicating-with-host-localhost-port-fresh-install</guid>
<pubDate>Tue, 09 Feb 2021 19:10:32 +0000</pubDate>
</item>
<item>
<title>Error message when querying dev-local</title>
<link>https://ask.datomic.com/index.php/552/error-message-when-querying-dev-local</link>
<description>&lt;p&gt;Why do I get this message:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;:db.error/not-an-entity Unable to resolve entity: :release/name 
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;when I run the query below in the &quot;Movies&quot; db in dev-local? &lt;/p&gt;
&lt;p&gt;Here is the code:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(defonce client (d/client {:server-type :dev-local
                           :system &quot;datomic-samples&quot;}))

(d/create-database client {:db-name &quot;movies&quot;})

(defonce conn (d/connect client {:db-name &quot;movies&quot;}))

(defonce db (d/db conn))

(d/q '[:find ?release-name
       :in $
       :where [$ _ :release/name ?release-name]]
     db)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Many thanks for any solution!&lt;/p&gt;
</description>
<category>On-Prem</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/552/error-message-when-querying-dev-local</guid>
<pubDate>Sat, 05 Dec 2020 18:10:18 +0000</pubDate>
</item>
<item>
<title>How do I remove a unique tuple constraint?</title>
<link>https://ask.datomic.com/index.php/523/how-do-i-remove-a-unique-tuple-constraint</link>
<description>&lt;p&gt;I have a tuple constraint as follows:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#:db{:id 182,
 :ident :ps2st/product-set+style-tier,
 :valueType :db.type/tuple,
 :cardinality :db.cardinality/one,
 :unique :db.unique/identity,
 :tupleAttrs [:ps2st/product-set :ps2st/style-tier]}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This constraint is overly restrictive. I read somewhere that tupleAttrs can not be altered, so I'd like to remove the constraint instead and then create a new one with more tuple attrs.&lt;/p&gt;
&lt;p&gt;How can I delete a constraint?&lt;/p&gt;
</description>
<category>On-Prem</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/523/how-do-i-remove-a-unique-tuple-constraint</guid>
<pubDate>Fri, 20 Nov 2020 21:12:31 +0000</pubDate>
</item>
<item>
<title>What does the memcached/item-too-large log warning mean?</title>
<link>https://ask.datomic.com/index.php/484/what-does-the-memcached-item-too-large-log-warning-mean</link>
<description>&lt;p&gt;I'm seeing a fair frequency of  &lt;code&gt;:memcached/item-too-large&lt;/code&gt; statements in my Datomic logs. &lt;/p&gt;
&lt;p&gt;Is this a size limitation internal to Datomic? If so, could it mean our system is missing out on some cached segments? &lt;/p&gt;
&lt;p&gt;A recent &lt;code&gt;datomic.process-monitor&lt;/code&gt; log statement is showing:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{:tid 23,
 :CacheRepair {:lo 1, :count 637, :sum 637, :hi 1},
 :ObjectCacheCount 16634,
 :PeerAcceptNewMsec {:lo 0, :count 348, :sum 1, :hi 1},
 :MemcachedPutSucceededMsec {:lo 0, :count 602, :sum 1276, :hi 177},
 :AvailableMB 5550.0,
 :Memcache {:lo 0, :count 12175, :sum 11537, :hi 1},
 :StorageGetMsec {:lo 2, :count 637, :sum 10089, :hi 831},
 :MemcacheItemTooLarge {:lo 1, :count 4, :sum 4, :hi 1},
 :pid 18,
 :event :metrics,
 :ObjectCache {:lo 0, :count 702668, :sum 690336, :hi 1},
 :MetricsReport {:lo 1, :count 1, :sum 1, :hi 1},
 :PeerFulltextBatch {:lo 1, :count 332, :sum 348, :hi 6},
 :DbAddFulltextMsec {:lo 0, :count 21, :sum 30, :hi 12},
 :MemcachedPutFailedMsec {:lo 0, :count 31, :sum 541, :hi 52},
 :StorageGetBytes {:lo 122, :count 637, :sum 92206399, :hi 31294091}}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Which would seem to suggest a high hit rate judging from the &lt;code&gt;:Memcache&lt;/code&gt; &lt;code&gt;:sum / :count&lt;/code&gt; &lt;/p&gt;
&lt;p&gt;Is this something I can fix or would cause issues? &lt;/p&gt;
&lt;p&gt;Thanks!!&lt;/p&gt;
</description>
<category>On-Prem</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/484/what-does-the-memcached-item-too-large-log-warning-mean</guid>
<pubDate>Tue, 27 Oct 2020 17:54:45 +0000</pubDate>
</item>
<item>
<title>Expose an alt-port transactor configuration property</title>
<link>https://ask.datomic.com/index.php/469/expose-an-alt-port-transactor-configuration-property</link>
<description>&lt;p&gt;The alt-host configuration property is great and helps in many scenarios, but not having an equivalent for the port (alt-port?) is a blocker in some other scenarios. It would be great to have such property, which would default to the same port as the transactor is listening.&lt;/p&gt;
</description>
<category>On-Prem</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/469/expose-an-alt-port-transactor-configuration-property</guid>
<pubDate>Sun, 25 Oct 2020 19:45:14 +0000</pubDate>
</item>
<item>
<title>Allow for setting transactor properties using environment variables</title>
<link>https://ask.datomic.com/index.php/470/allow-setting-transactor-properties-environment-variables</link>
<description>&lt;p&gt;Datomic should be able to read it's settings from environment variables, following a naming standard like what Spring Boot does. E.g.:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;DATOMIC_LICENSE_KEY&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DATOMIC_PROTOCOL&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DATOMIC_PORT&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;…&lt;/li&gt;
&lt;/ul&gt;
</description>
<category>On-Prem</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/470/allow-setting-transactor-properties-environment-variables</guid>
<pubDate>Sun, 25 Oct 2020 18:08:09 +0000</pubDate>
</item>
<item>
<title>Support AWS dynamo point in time backup in on-prem.</title>
<link>https://ask.datomic.com/index.php/468/support-aws-dynamo-point-in-time-backup-in-on-prem</link>
<description>&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://aws.amazon.com/blogs/aws/new-amazon-dynamodb-continuous-backups-and-point-in-time-recovery-pitr/&quot;&gt;https://aws.amazon.com/blogs/aws/new-amazon-dynamodb-continuous-backups-and-point-in-time-recovery-pitr/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Currently Datomic supplies backup/restore capability here:&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://docs.datomic.com/on-prem/backup.html&quot;&gt;https://docs.datomic.com/on-prem/backup.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Dynamo's PITR remains untested for use with Datomic DBs. Implementation of this feature would ensure that using Dynamo's PITR causes no issues on a Datomic DB.&lt;/p&gt;
</description>
<category>On-Prem</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/468/support-aws-dynamo-point-in-time-backup-in-on-prem</guid>
<pubDate>Sun, 25 Oct 2020 16:57:02 +0000</pubDate>
</item>
<item>
<title>Relation between T and :db/txInstant</title>
<link>https://ask.datomic.com/index.php/457/relation-between-t-and-db-txinstant</link>
<description>&lt;p&gt;Hello folks,&lt;/p&gt;
&lt;p&gt;Is there a precise relation between db's T value and the txInstant of an entity?&lt;/p&gt;
&lt;p&gt;I have a database and if I do &lt;code&gt;(:t db)&lt;/code&gt; I get 7 as value. Fair.&lt;/p&gt;
&lt;p&gt;Meanwhile, if I look for a &lt;code&gt;:db/txInstant&lt;/code&gt; for an entity via &lt;code&gt;(def query '[:find ?tx :where [?e :person/id _ ?tx]])&lt;/code&gt; I get very long number.&lt;/p&gt;
&lt;p&gt;What is the relationship between the two? To give some context, what I am trying to do is:&lt;/p&gt;
&lt;p&gt;&quot;Given a certain entity ID, what was the latest &lt;code&gt;t&lt;/code&gt; that has introduced/updated such entity?&lt;/p&gt;
</description>
<category>On-Prem</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/457/relation-between-t-and-db-txinstant</guid>
<pubDate>Sat, 24 Oct 2020 14:57:57 +0000</pubDate>
</item>
<item>
<title>New engine for executing java scripts on the transactor</title>
<link>https://ask.datomic.com/index.php/455/new-engine-for-executing-java-scripts-on-the-transactor</link>
<description>&lt;p&gt;Is it planned to consider another script executing engines than &lt;strong&gt;janino&lt;/strong&gt;? There is script evaluator provided by &lt;strong&gt;groovy.lang.GroovyShell&lt;/strong&gt; which can execute java scripts too. I  have compared the time to evaluate the same java script by both engines and groovy engine executes significantly faster. Another positive side effect: support of groovy scripts. I believe using of new script evaluator will make improvements to the time of executing transactor functions written in java &lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://docs.groovy-lang.org/latest/html/api/groovy/lang/GroovyShell.html&quot;&gt;https://docs.groovy-lang.org/latest/html/api/groovy/lang/GroovyShell.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;UPD.&lt;/strong&gt; How much are java transactor scripts executted longer than clojure transactor scripts?&lt;/p&gt;
</description>
<category>On-Prem</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/455/new-engine-for-executing-java-scripts-on-the-transactor</guid>
<pubDate>Fri, 23 Oct 2020 13:52:54 +0000</pubDate>
</item>
<item>
<title>Can datomic.api/q be used inside or/or-join to query data from other DB?</title>
<link>https://ask.datomic.com/index.php/454/can-datomic-api-be-used-inside-or-or-join-query-data-from-other</link>
<description>&lt;p&gt;Hi, when I'm executing query in repl in such way:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(d/q &quot;[:find
 [?Post ...]
 :in
 $
 $comment
 [?Post_value_0 ...]
 :where

[?Post :IModel/typeName ?Post_value_0]
(or-join 
 [?Post ?Comment_text_value_3]

 [(datomic.api/q
   \&quot;[:find [?Comment_uid_2 ...] :in $ :where 
   [?Comment_by_text_1 :Comment/text _]
   [?Comment_by_text_1 :IModel/uid ?Comment_uid_2]
   ]\&quot;
   $comment)
  [?Comment_uid_2 ...]]

  [(datomic.api/q
   \&quot;[:find [?Comment_uid_2 ...] :in $ :where 
   [?Comment_by_text_1 :Comment/text _]
   [?Comment_by_text_1 :IModel/uid ?Comment_uid_2]
   ]\&quot;
   $comment)
  [?Comment_uid_2 ...]]

)
 [?Post :Post/comments ?Comment_uid_2]
]
&quot; (d/db conn) (d/db connComment) #{&quot;Post&quot;})
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The next error is returned:&lt;br&gt;
&lt;strong&gt;:db.error/not-an-entity Unable to resolve entity: :Comment/text&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;My supposing is that query inside &lt;strong&gt;datomic.api/q&lt;/strong&gt; is executed for database returned by &lt;strong&gt;(d/db conn)&lt;/strong&gt; but not &lt;strong&gt;(d/db connComment)&lt;/strong&gt; because if I create &lt;strong&gt;:Comment/text&lt;/strong&gt; for the first database from input list then query is executed without errors.&lt;/p&gt;
&lt;p&gt;If to avoid &lt;strong&gt;or-join&lt;/strong&gt; and execute the query in the next way:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(d/q &quot;[:find
 [?Post ...]
 :in
 $
 $comment
 [?Post_value_0 ...]
 :where

[?Post :IModel/typeName ?Post_value_0]
 [?Post ?Comment_text_value_3]

 [(datomic.api/q
   \&quot;[:find [?Comment_uid_2 ...] :in $ :where 
   [?Comment_by_text_1 :Comment/text _]
   [?Comment_by_text_1 :IModel/uid ?Comment_uid_2]
   ]\&quot;
   $comment)
  [?Comment_uid_2 ...]]

  [(datomic.api/q
   \&quot;[:find [?Comment_uid_2 ...] :in $ :where 
   [?Comment_by_text_1 :Comment/text _]
   [?Comment_by_text_1 :IModel/uid ?Comment_uid_2]
   ]\&quot;
   $comment)
  [?Comment_uid_2 ...]]


 [?Post :Post/comments ?Comment_uid_2]
]
&quot; (d/db conn) (d/db connComment) #{&quot;Post&quot;})
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;then query is executed without errors.&lt;/p&gt;
&lt;p&gt;Datamic on prem 0.9.6.* version&lt;/p&gt;
</description>
<category>On-Prem</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/454/can-datomic-api-be-used-inside-or-or-join-query-data-from-other</guid>
<pubDate>Fri, 23 Oct 2020 10:53:08 +0000</pubDate>
</item>
<item>
<title>Delete all except the latest point in time within a backup URI</title>
<link>https://ask.datomic.com/index.php/452/delete-all-except-the-latest-point-in-time-within-backup-uri</link>
<description>&lt;p&gt;Also deleting a single point in time might be useful&lt;/p&gt;
</description>
<category>On-Prem</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/452/delete-all-except-the-latest-point-in-time-within-backup-uri</guid>
<pubDate>Thu, 22 Oct 2020 21:46:45 +0000</pubDate>
</item>
<item>
<title>Provide integrity check on Datomic Backups</title>
<link>https://ask.datomic.com/index.php/432/provide-integrity-check-on-datomic-backups</link>
<description>&lt;p&gt;A tool to confirm the validity and completeness of a Datomic backup.&lt;/p&gt;
</description>
<category>On-Prem</category>
<guid isPermaLink="true">https://ask.datomic.com/index.php/432/provide-integrity-check-on-datomic-backups</guid>
<pubDate>Thu, 22 Oct 2020 18:03:10 +0000</pubDate>
</item>
</channel>
</rss>