My problems are that I don't know enough Datomic to figure out how to have "a value index". I'm studying the documentation on schema change at https://docs.datomic.com/cloud/schema/schema-change.html
There are two pre-conditions:In order to add a uniqueness constraint to an attribute, both of the following must be true:
> The attribute must have a cardinality of `:db.cardinality/one`.
> If there are values present for that attribute, they must be unique in the set of current database assertions.
For the first one, my schema for :user/email already has :db.cardinality/one
.
For the second one, I don't know how to handle:
1. how to check if the values present for :user/email are unique or not
2. If not, how to fix them.
Hello, I'm discovering Datomic entity specs. I tried to trigger an spec error and here is the message:
"Entity temp-id missing attributes clojure.lang.LazySeq@e65620e6 of spec :admin/validate"
The doc example gives:
"Entity 42 missing attributes [:user/email] of by :user/validate"}
Clearly, the serialization of the missing attribute seems to go wrong.
I'm using the latest version of Datomic (`1.0.6202` ).
Is it a known problem?Here is the spec:
{:db/ident :admin/validate
:db.entity/attrs [:admin/email :admin/hashed_password]}
and here are the attribute declarations:
{:db/ident :admin/email
:db/valueType :db.type/string
:db/unique :db.unique/identity
:db/cardinality :db.cardinality/one
:db.attr/preds myproject.entities.entity/email?}
{:db/ident :admin/hashed_password
:db/valueType :db.type/string
:db/cardinality :db.cardinality/one}
The only "particular" thing that I see is that the email field has an attibute predicate.
ThanksHey @dam I've made a ticket to look at this more closely. I'll keep you updated on what I find could you DM me an e-mail so I can contact you in the event that this slack convo gets archived while I am poking around?
Thank you very much! I do it right now.
Also I noted those points that seem weird:
1 - The documentation says: :db/ensure
is a virtual attribute. It is not added in the database; instead it triggers checkes based on the named entity. When I then pull all the attributes of the entity, the :db/ensure
field appears.
{:db/id 17592186045425,
:db/ensure [#:db{:id 17592186045420}],
:user/hashed-password "...",
...}
I then don't get what is a "virtual attribute" then.
2 - After transacting successfully an entity with its spec "activated", I could then retract a field without triggering the entity spec:
(datomic.api/transact
conn*
[[:db/retract 17592186045425 :user/hashed_password]])
The resulting entity viiolates the spec but nothing was triggered. Is it the desired behaviour of entity specs?
Thanksdoes Datomic use auto-discovery when integrating with the managed memcached in AWS? Or do we need to pass in each relevant memcached node individually?
can you share your :admin/validate spec ?