How to aggregate JSONB in PostgreSQL 9.5+
Learn how to aggregate (aka merge aka combine aka collect) JSONB fields in Postgres 9.5+.
Update We used to call this jsonb_collect
, but then we realized it was very similar to json_object_agg(name, value)
... except that there is no version of that function that just takes an expression. So, copying jsonb_agg(expression)
, we give you...
How do you aggregate (aka merge aka combine aka collect) JSONB fields in Postgres 9.5+? You define a new aggregate jsonb_object_agg(expression)
:
CREATE AGGREGATE jsonb_object_agg(jsonb) (
SFUNC = 'jsonb_concat',
STYPE = jsonb,
INITCOND = '{}'
);
Here's how you use it:
# select * from greetings;
data
-----------------------
{"es":"Saludos"}
{"en":"Hello"}
{"ru":"Здравствуйте"}
(3 rows)
# select jsonb_object_agg(data) from greetings;
jsonb_object_agg
-------------------------------------------------------------
{ "es" : "Saludos", "en" : "Hello", "ru" : "Здравствуйте" }
(1 row)
If you're curious about the aggregate we just added, note that jsonb_concat(jsonb, jsonb)
is the function backing ||
that was introduced in Postgres 9.5.
It's just that simple!
Ready for easy AI?
Skip the ML struggle and focus on your downstream application. We have built-in sample data so you can get started without sharing yours.