JSONB
Clear offers JSONB functions through Clear::SQL::JSONB
helper and the Expression Engine.
JSONB is a great No-SQL mapping under PostgreSQL. It helps you to store value and documents which otherwise would be difficult
Let's imaging a table events
where you store the events of differents suppliers:
Postgres limitation and Clear's answer
The main limitation of JSONB is the "simple" syntax is not indexable. For example:
The code above will not use any indexes and will do a sequencial scan over your table.
However, using the @>
operator and a gin
index on your column will improve drastically the performances:
Obviously, the second syntax is more complex and error prone. Clear offers leverage and simplicity:
Expression Engine
jsonb
calling node.jsonb(key)
on expression node will resolve to:
node->'key_elm1'->'key_elm...n'
Using equality testing between a jsonb path and a literal will use the indexable notation @>
:
In the case the operation is not indexable (e.g. the value is variable, operator is not equality...), Clear will automatically switch back to the arrow ->
notation:
Casting
You can cast the element using cast
after your expression:
Note: If you cast the jsonb
, clear will never use @>
operator
From path to arrow notation
Use outside Expression Engine (@>
operator)
@>
operator)Last updated