By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0.
Help with an interesting Postgres question: Why isn't an Index Only Scan used on a partition accessed via the parent table?.
CREATE TABLE
INSERT 0 11
CREATE INDEX
id | jdata |
---|---|
1 | {"name": "Somedata", "array": [{"attr": "somevalue", "name": "bla1"}, {"name": "bla2", "otherdata": "somevalue2"}, {"name": "bla3", "otherdata": "somevalue"}], "array2": ["bla21", "bla20", "bla22", "bla23"], "otherstuff": "stuff"} |
2 | {"name": "Somedata", "array": [{"attr": null, "name": "bla0"}, {"name": "bla2", "otherdata": "somevalue2"}, {"name": "bla3", "otherdata": "somevalue"}], "array2": ["bla21", "bla20", "bla22", "bla23"], "otherstuff": "stuff"} |
5 | {"name": "Somedata", "array": [{"name": "bla0", "non-attr": "somevalue"}, {"name": "bla2", "otherdata": "somevalue2"}, {"name": "bla3", "otherdata": "somevalue"}, [{"attr": "somevalue", "name": "bla1"}]], "array2": ["bla21", "bla20", "bla22", "bla23"], "otherstuff": "stuff"} |
SELECT 3
id | jdata |
---|---|
1 | {"name": "Somedata", "array": [{"attr": "somevalue", "name": "bla1"}, {"name": "bla2", "otherdata": "somevalue2"}, {"name": "bla3", "otherdata": "somevalue"}], "array2": ["bla21", "bla20", "bla22", "bla23"], "otherstuff": "stuff"} |
2 | {"name": "Somedata", "array": [{"attr": null, "name": "bla0"}, {"name": "bla2", "otherdata": "somevalue2"}, {"name": "bla3", "otherdata": "somevalue"}], "array2": ["bla21", "bla20", "bla22", "bla23"], "otherstuff": "stuff"} |
5 | {"name": "Somedata", "array": [{"name": "bla0", "non-attr": "somevalue"}, {"name": "bla2", "otherdata": "somevalue2"}, {"name": "bla3", "otherdata": "somevalue"}, [{"attr": "somevalue", "name": "bla1"}]], "array2": ["bla21", "bla20", "bla22", "bla23"], "otherstuff": "stuff"} |
SELECT 3
id | jdata |
---|---|
1 | {"name": "Somedata", "array": [{"attr": "somevalue", "name": "bla1"}, {"name": "bla2", "otherdata": "somevalue2"}, {"name": "bla3", "otherdata": "somevalue"}], "array2": ["bla21", "bla20", "bla22", "bla23"], "otherstuff": "stuff"} |
2 | {"name": "Somedata", "array": [{"attr": null, "name": "bla0"}, {"name": "bla2", "otherdata": "somevalue2"}, {"name": "bla3", "otherdata": "somevalue"}], "array2": ["bla21", "bla20", "bla22", "bla23"], "otherstuff": "stuff"} |
SELECT 2
id | jdata |
---|---|
1 | {"name": "Somedata", "array": [{"attr": "somevalue", "name": "bla1"}, {"name": "bla2", "otherdata": "somevalue2"}, {"name": "bla3", "otherdata": "somevalue"}], "array2": ["bla21", "bla20", "bla22", "bla23"], "otherstuff": "stuff"} |
2 | {"name": "Somedata", "array": [{"attr": null, "name": "bla0"}, {"name": "bla2", "otherdata": "somevalue2"}, {"name": "bla3", "otherdata": "somevalue"}], "array2": ["bla21", "bla20", "bla22", "bla23"], "otherstuff": "stuff"} |
5 | {"name": "Somedata", "array": [{"name": "bla0", "non-attr": "somevalue"}, {"name": "bla2", "otherdata": "somevalue2"}, {"name": "bla3", "otherdata": "somevalue"}, [{"attr": "somevalue", "name": "bla1"}]], "array2": ["bla21", "bla20", "bla22", "bla23"], "otherstuff": "stuff"} |
6 | {"array": [{"name": "bla0", "non-attr": "somevalue"}, {"nested": {"attr": "somevalue", "name": "bla1"}}]} |
7 | {"array": [{"name": "bla0", "non-attr": "somevalue"}, {"nested": [{"attr": "somevalue", "name": "bla1"}]}]} |
9 | {"array": [{"name": "bla0", "non-attr": "somevalue"}, {"nested": [{"foo": [{"attr": "bar"}], "name": "bla1"}]}]} |
10 | {"array": [{"name": "bla0", "non-attr": "somevalue"}, [[[{"attr": "bar"}]]]]} |
11 | {"array": [{"name": "bla0", "non-attr": "somevalue"}, [[{"bar": [{"attr": "bar"}], "foo": 1}]]]} |
SELECT 8
id | jdata |
---|---|
4 | {"name": "Somedata", "array": [{"name": "bla0", "non-attr": "somevalue"}, {"name": "bla2", "otherdata": "somevalue2"}, {"name": "bla3", "otherdata": "somevalue"}, "attr"], "array2": ["bla21", "bla20", "bla22", "bla23"], "otherstuff": "stuff"} |
SELECT 1
id | jdata |
---|---|
4 | {"name": "Somedata", "array": [{"name": "bla0", "non-attr": "somevalue"}, {"name": "bla2", "otherdata": "somevalue2"}, {"name": "bla3", "otherdata": "somevalue"}, "attr"], "array2": ["bla21", "bla20", "bla22", "bla23"], "otherstuff": "stuff"} |
8 | {"array": [{"name": "bla0", "non-attr": "somevalue"}, {"nested": [{"foo": ["attr"], "name": "bla1"}]}]} |
SELECT 2
SET
QUERY PLAN |
---|
Bitmap Heap Scan on tbl (cost=68.00..72.02 rows=1 width=36) |
Recheck Cond: ((jdata -> 'array'::text) @? 'strict $.**?(exists (@."attr"))'::jsonpath) |
-> Bitmap Index Scan on tbl_jdata_array_idx (cost=0.00..68.00 rows=1 width=0) |
Index Cond: ((jdata -> 'array'::text) @? 'strict $.**?(exists (@."attr"))'::jsonpath) |
EXPLAIN
QUERY PLAN |
---|
Bitmap Heap Scan on tbl (cost=12.00..16.02 rows=1 width=36) |
Recheck Cond: ((jdata -> 'array'::text) @? 'strict $.**?(@ == "attr")'::jsonpath) |
-> Bitmap Index Scan on tbl_jdata_array_idx (cost=0.00..12.00 rows=1 width=0) |
Index Cond: ((jdata -> 'array'::text) @? 'strict $.**?(@ == "attr")'::jsonpath) |
EXPLAIN