Think PostgreSQL with JSONB can replace a document database? It’s a tempting idea: Embed your related data directly inside a single JSONB column, and you should be able to avoid additional table lookups for data that is always queried together, just like in MongoDB, right? Be careful.
Unless your documents are small enough to fit comfortably within a fraction of a PostgreSQL page (8KB), what you embed logically into JSONB won’t physically be stored together in PostgreSQL. The result?
When you read that embedded data, PostgreSQL still performs an index lookup per document, just like a nested loop join in the relational model we were trying to avoid.
Using JSONB in PostgreSQL has its benefits, but it doesn't operate like a document database. SQL databases provide data independence (Codd rule #8), enabling developers to query a logical model without worrying about physical storage (until they need to read an execution plan). This data independence also applies to JSONB. Conversely, NoSQL databases give developers more control over physical data layout. In MongoDB, storing a JSON document as BSON enforces data locality by embedding related data, to improve query performance, sharding, and transactions. In PostgreSQL, however, the same JSON value may be split into multiple rows in a separate TOAST table, only hiding the underlying index traversal and joins.
Let's explore a straightforward example of a one-to-many relationship within a JSONB column. We will also examine the execution plan to uncover what occurs behind the scenes.
The normalized relational model
Here is a typical relational model for storing a one-to-many relationship, orders, and their items, in two tables to adhere to the first normal form (3NF):
create table orders (
primary key(ord_id)
, ord_id bigint
, ord_dat timestamptz
);
create table order_items (
primary key(ord_id, ord_seq)
, ord_id bigint references orders (ord_id) on delete cascade
deferrable initially deferred
, ord_seq int
, item text
);
I loaded 100,000 orders, each containing 10 items. Each item is 2,000 characters long, to reach PostgreSQL's TOAST_TUPLE_THRESHOLD (typically set to one-fourth of the block size), and get them compressed. Documents in a document database are typically designed to align with a domain-driven aggregate. This encompasses all objects involved in a business transaction. For the order entry use-case, this includes large text like the product name and description at the time of ordering. I generate random items with a COPY command from /dev/urandom:
-- must run in a transaction to avoid showing orphans
begin transaction;
-- load random order items
copy order_items from program $$
base64 -w 2000 /dev/urandom | awk '
NR>1000000 {exit} # 1,000,000 rows
{ print int(1+NR/10) "," NR%10 "," $0 }' # ,1000,000/10 orders, 10 items
$$ with (format csv)
;
-- load corresponding orders
insert into orders
select ord_id , clock_timestamp()
from order_items group by ord_id
;
-- end transaction
commit work;
-- finish the work with some cleanup and statistics gathering
vacuum analyze orders, order_items;
This dataset illustrates a typical one-to-many relationship in a normalized SQL database.
JOIN on normalized tables
To fetch an order and its items, the application must join the two tables:
postgres=#
select ord_id, ord_seq, item
from orders
left outer join order_items using(ord_id)
where ord_id=42
order by ord_id, ord_seq
;
item
--------+---------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
42 | 0 | 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
(10 rows)
Here is the execution plan:
postgres=# explain (analyze, buffers, serialize text, costs off)
select ord_id, ord_dat, ord_seq, item
from orders
left outer join order_items using(ord_id)
where ord_id=42
order by ord_id, ord_seq
;
QUERY PLAN
------------------------------------------------------------------------------------------------------------
Sort (actual time=0.031..0.032 rows=10.00 loops=1)
Sort Key: order_items.ord_seq
Sort Method: quicksort Memory: 25kB
Buffers: shared hit=8
-> Nested Loop Left Join (actual time=0.020..0.025 rows=10.00 loops=1)
Buffers: shared hit=8
-> Index Scan using orders_pkey on orders (actual time=0.009..0.010 rows=1.00 loops=1)
Index Cond: (ord_id = 42)
Index Searches: 1
Buffers: shared hit=4
-> Index Scan using order_items_pkey on order_items (actual time=0.008..0.010 rows=10.00 loops=1)
Index Cond: (ord_id = 42)
Index Searches: 1
Buffers: shared hit=4
Planning:
Buffers: shared hit=3
Planning Time: 0.133 ms
Serialization: time=0.055 ms output=21kB format=text
Buffers: shared hit=40
Execution Time: 0.161 ms
In total, it has read eight pages (Buffers: shared hit=8
) due to traversing two indexes. For each table, it navigated the B-Tree, which here consists of one root page, one branch page, and one leaf page, before accessing the heap page. Thanks to compression, the items have been reduced from 20KB to a size that fits within a single heap page. You can verify the index height with the pageinspect extension:
postgres=# create extension if not exists pageinspect;
CREATE EXTENSION
postgres=# select btpo_level from bt_page_stats('order_items_pkey', (
select root from bt_metap('order_items_pkey'))
);
btpo_level
------------
2
I've read only one document in this example, but it can be worse with more documents. Since the two tables are always joined together in the order-entry domain, storing everything in one table can reduce the index access costs. For example, reading from the parent table requires accessing only four pages (the index and the table):
postgres=# explain (analyze, buffers, serialize text, costs off)
select ord_id, ord_dat
from orders
where ord_id=42
order by ord_id
;
QUERY PLAN
-------------------------------------------------------------------------------------
Index Scan using orders_pkey on orders (actual time=0.023..0.024 rows=1.00 loops=1)
Index Cond: (ord_id = 42)
Index Searches: 1
Buffers: shared hit=4
Planning Time: 0.061 ms
Serialization: time=0.004 ms output=1kB format=text
Execution Time: 0.042 ms
In MongoDB, embedding minimizes lookups and joins (Data that is accessed together should be stored together, as described in How to Model Data in Document Databases for Read and Write Performance). Let's try to apply this concept in PostgreSQL by embedding items within orders, potentially allowing traversal of a single index instead of two. Let's explore this using JSONB.
Migration from 3NF to JSONB (ØNF)
I add a JSONB column and update it with an array of items:
alter table orders add column items jsonb;
update orders o
set items = sub.items
from (
select ord_id, jsonb_agg(item order by ord_seq) as items
from order_items
group by ord_id
) sub
where o.ord_id = sub.ord_id;
vacuum analyze orders, order_items;
I can now query a single table to get orders with their items:
postgres=# select *
from orders
where ord_id=42
order by ord_id
;
ord_id | ord_dat | items
--------+-------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
42 | 2025-08-22 19:41:56.063869+00 | ["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"]
(1 row)
To get the same result as the join between two tables, I could join with an unnested view (equivalent of MongoDB $unwind) of the JSONB array:
postgres=# select
o.ord_id,
elem.ordinality as ord_seq,
elem.item
from orders o
cross join lateral (
select ordinality, item
from jsonb_array_elements_text(o.items)
with ordinality as t(item, ordinality)
) elem
where o.ord_id = 42
order by o.ord_id, ord_seq
; ord_id | ord_seq | item
--------+---------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
42 | 1 | 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
(10 rows)
At the logical level, this looks similar to MongoDB, where the same query would be:
db.orders.aggregate([
{ $match: { ord_id: 42 } },
{ $unwind: { path: "$items", includeArrayIndex: "ord_seq" } },
{ $sort: { ord_id: 1, ord_seq: 1 } }
]);
However, to assess the performance and see how data is accessed at the physical level, we need to run EXPLAIN ANALYZE.
Reading TOASTed JSONB
Unfortunately, reading the order items from this single table in PostgreSQL is now more costly than before. Without the items, it required reading four pages, but it now requires 10 pages, which is even more than when I joined two tables:
postgres=# explain (analyze, buffers, serialize text, costs off)
select
o.ord_id,
elem.ordinality - 1 as ord_seq,
elem.item
from orders o
cross join lateral (
select ordinality, item
from jsonb_array_elements_text(o.items) with ordinality as t(item, ordinality)
) elem
where o.ord_id = 42
order by o.ord_id, ord_seq;
QUERY PLAN
--------------------------------------------------------------------------------------------------------
Sort (actual time=0.073..0.074 rows=10.00 loops=1)
Sort Key: ((t.ordinality - 1))
Sort Method: quicksort Memory: 44kB
Buffers: shared hit=10
-> Nested Loop (actual time=0.062..0.065 rows=10.00 loops=1)
Buffers: shared hit=10
-> Index Scan using orders_pkey on orders o (actual time=0.019..0.019 rows=1.00 loops=1)
Index Cond: (ord_id = 42)
Index Searches: 1
Buffers: shared hit=4
-> Function Scan on jsonb_array_elements_text t (actual time=0.040..0.041 rows=10.00 loops=1)
Buffers: shared hit=6
Planning Time: 0.096 ms
Serialization: time=0.006 ms output=20kB format=text
Execution Time: 0.101 ms
The execution plan involves four pages for accessing the order, plus six additional pages for reading from jsonb_array_elements_text
to access JSONB content. There's a hidden index scan behind this function.
Since the JSONB column is larger than an 8KB block fraction, PostgreSQL stores it externally, compressing the data into chunks in a TOAST child table, with the parent table holding only a logical reference to it. Fetching the JSONB content requires an additional index access per document, resulting in more pages read. This process resembles a join operation, where the join key is an internal identifier rather than a declared foreign key, and the child rows consist of JSONB data chunks rather than individual rows.
To see exactly the cost of accessing TOAST, I do not need to unnest the array. By default, EXPLAIN ANALYZE reads only the internal pointer but doesn't fetch the document. I need to add SERIALIZE to get it:
postgres=# explain (analyze, buffers, serialize text, costs off)
select *
from orders
where ord_id=42
order by ord_id
;
QUERY PLAN
-------------------------------------------------------------------------------------
Index Scan using orders_pkey on orders (actual time=0.020..0.020 rows=1.00 loops=1)
Index Cond: (ord_id = 42)
Index Searches: 1
Buffers: shared hit=4
Planning Time: 0.060 ms
Serialization: time=0.041 ms output=20kB format=text
Buffers: shared hit=6
Execution Time: 0.074 ms
Serialization reads 10 items, each 2,000 characters long (output= 20kB
), which fits into two 8KB pages after compression. However, accessing these items requires additional pages due to the need to traverse an internal B-Tree index. Even when items are logically embedded in JSONB, it does not eliminate the equivalent of a nested loop index access to the TOAST table, resulting in costs comparable to those in a normalized model. Essentially, the same process occurs behind the scenes, using a set of chunks instead of a set of rows. Thus, if the goal of embedding was to achieve data locality, this objective is ultimately not met.
It can be worse: N+1 problem
I've read a single document, but it becomes worse when reading more. The following reads the last 10 orders with their items:
explain (analyze, buffers, serialize text, costs off)
select *
from orders
order by ord_dat desc limit 1000
;
QUERY PLAN
------------------------------------------------------------------------------------------------
Limit (actual time=9.513..9.930 rows=1000.00 loops=1)
Buffers: shared hit=1412
-> Gather Merge (actual time=9.512..9.836 rows=1000.00 loops=1)
Workers Planned: 1
Workers Launched: 1
Buffers: shared hit=1412
-> Sort (actual time=8.005..8.080 rows=804.50 loops=2)
Sort Key: ord_dat DESC
Sort Method: top-N heapsort Memory: 166kB
Buffers: shared hit=1412
Worker 0: Sort Method: top-N heapsort Memory: 169kB
-> Parallel Seq Scan on orders (actual time=0.181..3.226 rows=50000.50 loops=2)
Buffers: shared hit=1374
Planning Time: 0.062 ms
Serialization: time=19.116 ms output=19617kB format=text
Buffers: shared hit=4029 read=2637
Execution Time: 29.276 ms
Although not shown in the execution plan, an equivalent of loops=1000
was used, which read over 6,000 buffers to retrieve 1,000 documents. On normalized tables, the query planner can optimize joins, but here, the lookup to a TOAST table is similar to the old N+1 problem with ORMs. This is not a surprise as the JSONB document is internally mapped to relational tables.
To focus on the main problem, I used only optimal queries, where I know each JSONB document is read once, but as we have seen in a previous post on DeTOASTing, it can be worse. For example, look at this query where the applications reads only the first item (items->0
) of each document:
postgres=# select version();
version
------------------------------------------------------------------------------------------------------------------------------------------
PostgreSQL 18beta2 (Debian 18~beta2-1.pgdg120+1) on aarch64-unknown-linux-gnu, compiled by gcc (Debian 12.2.0-14+deb12u1) 12.2.0, 64-bit
(1 row)
postgres=# explain (analyze, buffers, serialize text, verbose, costs off)
select items->0
from orders
order by ord_dat desc limit 1000
;
QUERY PLAN
---------------------------------------------------------------------------------------------------------
Limit (actual time=862.465..864.733 rows=1000.00 loops=1)
Output: ((items -> 0)), ord_dat
Buffers: shared hit=395005 read=273103
-> Gather Merge (actual time=862.464..864.647 rows=1000.00 loops=1)
Output: ((items -> 0)), ord_dat
Workers Planned: 1
Workers Launched: 1
Buffers: shared hit=395005 read=273103
-> Sort (actual time=857.566..857.646 rows=517.00 loops=2)
Output: ((items -> 0)), ord_dat
Sort Key: orders.ord_dat DESC
Sort Method: top-N heapsort Memory: 3415kB
Buffers: shared hit=395005 read=273103
Worker 0: actual time=859.630..859.715 rows=536.00 loops=1
Sort Method: top-N heapsort Memory: 3489kB
Buffers: shared hit=198873 read=136729
-> Parallel Seq Scan on public.orders (actual time=0.752..838.417 rows=50000.50 loops=2)
Output: (items -> 0), ord_dat
Buffers: shared hit=394973 read=273097
Worker 0: actual time=0.175..840.376 rows=50267.00 loops=1
Buffers: shared hit=198841 read=136723
Planning Time: 0.062 ms
Serialization: time=0.946 ms output=1961kB format=text
Execution Time: 865.874 ms
Because the query did a Seq Scan and unfortunately had pushed down the extraction of the item (Output: (items -> 0)
), it has read in total half a million pages (395005 + 273103), all documents, before applying the LIMIT filter.
JSONB utilizes the TOAST mechanism, which enables access to the entire content of a single column value that is too large to fit in a block. However, it's not optimized for processing document contents after they're TOASTed. By switching from a relational to a document model while remaining in an RDBMS, for large embedded documents that trigger TOAST, you lose the benefits of normalization while also missing out on the physical data locality a document database would provide, because you still have relational tables with small blocks in the storage. Let's look at them.
TOAST table and index scan
The mechanism is not visible in the execution plan, but the structure of the additional tables and indexes is visible to the SQL user. For each table with an extended datatype like TEXT, JSON, or JSONB, PostgreSQL creates a TOAST table to store the chunks:
postgres=# select
format('pg_toast_%s' ,'orders'::regclass::oid) as "table",
format('pg_toast_%s_index','orders'::regclass::oid) as "index"
;
table | index
-------------------+-------------------------
pg_toast_10730420 | pg_toast_10730420_index
(1 row)
\gset
postgres=# \d+ pg_toast.:table
TOAST table "pg_toast.pg_toast_10730420"
Column | Type | Storage
------------+---------+---------
chunk_id | oid | plain
chunk_seq | integer | plain
chunk_data | bytea | plain
Owning table: "public.orders"
Indexes:
"pg_toast_10730420_index" PRIMARY KEY, btree (chunk_id, chunk_seq)
Access method: heap
postgres=# \d+ pg_toast.:index
Index "pg_toast.pg_toast_10730420_index"
Column | Type | Key? | Definition | Storage | Stats target
-----------+---------+------+------------+---------+--------------
chunk_id | oid | yes | chunk_id | plain |
chunk_seq | integer | yes | chunk_seq | plain |
primary key, btree, for table "pg_toast.pg_toast_10730420"
In order to read the full JSONB, it gets the chunks with a join from the TOAST pointer (visible with pg_column_toast_chunk_id()
) to the TOAST table, similar to this:
postgres=# SELECT o.ord_id, o.ord_dat, t.chunk_id, t.chunk_seq, t.ctid,
pg_size_pretty(length(t.chunk_data)::bigint) AS chunk_size
FROM orders o
JOIN pg_toast.pg_toast_10730420 t
ON t.chunk_id = pg_column_toast_chunk_id(o.items)
WHERE o.ord_id = 42
ORDER BY t.chunk_seq
;
ord_id | ord_dat | chunk_id | chunk_seq | ctid | chunk_size
--------+-------------------------------+----------+-----------+---------+------------
42 | 2025-08-22 20:33:37.366927+00 | 11730483 | 0 | (109,1) | 1996 bytes
42 | 2025-08-22 20:33:37.366927+00 | 11730483 | 1 | (109,2) | 1996 bytes
42 | 2025-08-22 20:33:37.366927+00 | 11730483 | 2 | (109,3) | 1996 bytes
42 | 2025-08-22 20:33:37.366927+00 | 11730483 | 3 | (109,4) | 1996 bytes
42 | 2025-08-22 20:33:37.366927+00 | 11730483 | 4 | (110,1) | 1996 bytes
42 | 2025-08-22 20:33:37.366927+00 | 11730483 | 5 | (110,2) | 1996 bytes
42 | 2025-08-22 20:33:37.366927+00 | 11730483 | 6 | (110,3) | 1996 bytes
42 | 2025-08-22 20:33:37.366927+00 | 11730483 | 7 | (110,4) | 1996 bytes
42 | 2025-08-22 20:33:37.366927+00 | 11730483 | 8 | (111,1) | 1996 bytes
42 | 2025-08-22 20:33:37.366927+00 | 11730483 | 9 | (111,2) | 1996 bytes
42 | 2025-08-22 20:33:37.366927+00 | 11730483 | 10 | (111,3) | 84 bytes
(11 rows)
I displayed CTID to verify that the chunks are not too scattered, which makes sense as it was inserted sequentially into an empty table.
With EXPLAIN ANALYZE, I confirm that this explicit join is similar to the implicit access to the JSONB content (Buffers: shared hit=10
):
postgres=# explain(analyze, buffers, costs off)
SELECT o.ord_id, o.ord_dat, t.chunk_id, t.chunk_seq,
pg_size_pretty(length(t.chunk_data)::bigint) AS chunk_size
FROM orders o
JOIN pg_toast.pg_toast_10730420 t
ON t.chunk_id = pg_column_toast_chunk_id(o.items)
WHERE o.ord_id = 42
ORDER BY t.chunk_seq;
QUERY PLAN
--------------------------------------------------------------------------------------------------------------
Sort (actual time=0.059..0.060 rows=11.00 loops=1)
Sort Key: t.chunk_seq
Sort Method: quicksort Memory: 25kB
Buffers: shared hit=10
-> Nested Loop (actual time=0.045..0.052 rows=11.00 loops=1)
Buffers: shared hit=10
-> Index Scan using orders_pkey on orders o (actual time=0.017..0.018 rows=1.00 loops=1)
Index Cond: (ord_id = 42)
Index Searches: 1
Buffers: shared hit=4
-> Bitmap Heap Scan on pg_toast_10730420 t (actual time=0.022..0.025 rows=11.00 loops=1)
Recheck Cond: (chunk_id = pg_column_toast_chunk_id(o.items))
Heap Blocks: exact=3
Buffers: shared hit=6
-> Bitmap Index Scan on pg_toast_10730420_index (actual time=0.010..0.010 rows=11.00 loops=1)
Index Cond: (chunk_id = pg_column_toast_chunk_id(o.items))
Index Searches: 1
Buffers: shared hit=3
Planning Time: 0.121 ms
Execution Time: 0.083 ms
This execution plan reveals the actual physical access to the JSONB document, hidden behind Serialization
or jsonb_array_elements_text
or extracting an item: no guaranteed data locality.
To understand the numbers, you can look at the B-Tree branch level with pageinspect:
postgres=# create extension if not exists pageinspect;
CREATE EXTENSION
postgres=# select btpo_level from bt_page_stats('pg_toast.pg_toast_10730420_index', (
select root from bt_metap('pg_toast.pg_toast_10730420_index'))
);
btpo_level
------------
2
A B-Tree level of 2 means a height of 3, so, for each document access, three pages to read from the index before accessing to the heap table pages.
Note that with my query, the query planner selected a bitmap scan, but when reading TOAST chunks, it bypasses the query planner and uses an internal index scan used to read the catalog: systable_beginscan_ordered that gets chunks in order without additional sort. As I inserted documents of equal size without deleting anything, the chunks are well clustered. If it becomes fragmented, the TOAST table can be vacuumed alongside its table or specifically with VACUUM.
I migrated from a normalized schema to a document model to reduce lookups by storing one-to-many relationships in one table. However, this approach doesn't work in PostgreSQL, which splits JSONB documents, resulting in the creation of additional tables and indexes into a pg_toast
schema. This offers no performance benefit since I still have to join and traverse indexes, and I lose the logical model, with artificial chunks replacing logical rows.
When JSONB's compressed size exceeds 2KB, it acts like a normalized one-to-many relationship, storing chunks in another table accessed via an index on the chunk identifier and sequence. To avoid TOASTing, you should keep embedded content small rather than trying to mimic a document database. You can also set a larger threshold and block size (see PostgreSQL JSONB Size Limits to Prevent TOAST Slicing). However, you will run on a configuration that is less tested and not available in managed services. Note that this applies not only to JSONB but to any type that may exceed the 2KB threshold: TEXT, JSON, JSONB, and even the BSON implementation of Microsoft's DocumentDB extension.
To compare, MongoDB stores documents in variable page sizes, ranging from 32KB to the full size of the document, with a maximum of 16MB (the BSON limit). This means that regardless of the size of the array, you will not encounter any additional pages to read, and there's no need to go through an additional index to get embedded subdocuments or arrays.
To conclude, JSONB in PostgreSQL has its valid use cases, but it's crucial to clarify your goals:
- If your objective is to simulate MongoDB and use a document model to improve data locality, JSONB may not be the best fit. Instead, consider sticking to a relational model in PostgreSQL or transitioning to a document database, such as MongoDB.
- However, if you need to store small, flexible data alongside a relational model in your SQL tables, or persist infrequently accessed documents, then JSONB can be an appropriate choice.
In other words, PostgreSQL embeds JSON data logically, and MongoDB embeds it physically, to provide data locality that aligns with business objects and transactions. The two databases serve distinct purposes: One is designed for a data-centric normalized model, where JSONB is just another datatype, and the other is optimized for an application-driven document model.
Want to know more about when to normalize or denormalize? Store your data in relational SQL columns or JSON document attributes? I'll talk about that at pgconf.eu 2025:
Top comments (0)