add batch remove batch split batch comment selection show hidden batches hide batch highlight batch
db<>fiddle
donate feedback about
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 SCHEMA
CREATE TABLE
INSERT 0 9
INSERT 0 200000
id configuration
1 {"org": 1, "subscriberCodes": ["A555", "A666"]}
5 {"org": 5, "subscriberCodes": ["A555"]}
350 {"org": 341, "subscriberCodes": ["A555"]}
508 {"org": 499, "subscriberCodes": ["A555"]}
754 {"org": 745, "subscriberCodes": ["A555"]}
SELECT 5
id configuration
1 {"org": 1, "subscriberCodes": ["A555", "A666"]}
5 {"org": 5, "subscriberCodes": ["A555"]}
350 {"org": 341, "subscriberCodes": ["A555"]}
508 {"org": 499, "subscriberCodes": ["A555"]}
754 {"org": 745, "subscriberCodes": ["A555"]}
SELECT 5
QUERY PLAN
Gather (cost=1000.00..6488.85 rows=2510 width=36) (actual time=1.759..203.224 rows=496 loops=1)
  Output: id, configuration
  Workers Planned: 1
  Workers Launched: 1
  -> Parallel Seq Scan on permissions.application_settings (cost=0.00..5237.85 rows=1476 width=36) (actual time=0.048..141.283 rows=248 loops=2)
        Output: id, configuration
        Filter: ((application_settings.configuration ->> 'subscriberCodes'::text) ~~ '%A555%'::text)
        Rows Removed by Filter: 99756
        Worker 0: actual time=0.085..104.611 rows=191 loops=1
Planning Time: 0.037 ms
Execution Time: 203.417 ms
EXPLAIN
QUERY PLAN
Gather (cost=1000.00..6090.24 rows=3137 width=36) (actual time=0.165..208.460 rows=496 loops=1)
  Output: id, configuration
  Workers Planned: 1
  Workers Launched: 1
  -> Parallel Seq Scan on permissions.application_settings (cost=0.00..4776.54 rows=1845 width=36) (actual time=0.266..172.980 rows=248 loops=2)
        Output: id, configuration
        Filter: (application_settings.configuration @? '$."subscriberCodes"[*]?(@ == "A555")'::jsonpath)
        Rows Removed by Filter: 99756
        Worker 0: actual time=0.519..137.808 rows=195 loops=1
Planning Time: 0.054 ms
Execution Time: 208.505 ms
EXPLAIN
BEGIN
CREATE INDEX
QUERY PLAN
Bitmap Heap Scan on permissions.application_settings (cost=31.50..2508.82 rows=2000 width=36) (actual time=0.283..1.076 rows=496 loops=1)
  Output: id, configuration
  Recheck Cond: (application_settings.configuration @? '$."subscriberCodes"[*]?(@ == "A555")'::jsonpath)
  Heap Blocks: exact=450
  -> Bitmap Index Scan on application_settings_configuration_idx (cost=0.00..31.00 rows=2000 width=0) (actual time=0.214..0.215 rows=496 loops=1)
        Index Cond: (application_settings.configuration @? '$."subscriberCodes"[*]?(@ == "A555")'::jsonpath)
Planning Time: 25.776 ms
Execution Time: 1.390 ms
EXPLAIN
ROLLBACK
BEGIN
CREATE INDEX
QUERY PLAN
Bitmap Heap Scan on permissions.application_settings (cost=27.50..2509.82 rows=2000 width=36) (actual time=0.133..0.916 rows=496 loops=1)
  Output: id, configuration
  Recheck Cond: ((application_settings.configuration -> 'subscriberCodes'::text) @? '$[*]?(@ == "A555")'::jsonpath)
  Heap Blocks: exact=450
  -> Bitmap Index Scan on application_settings_expr_idx (cost=0.00..27.00 rows=2000 width=0) (actual time=0.075..0.075 rows=496 loops=1)
        Index Cond: ((application_settings.configuration -> 'subscriberCodes'::text) @? '$[*]?(@ == "A555")'::jsonpath)
Planning Time: 0.370 ms
Execution Time: 0.967 ms
EXPLAIN
ROLLBACK
BEGIN
CREATE INDEX
QUERY PLAN
Bitmap Heap Scan on permissions.application_settings (cost=27.50..2509.82 rows=2000 width=36) (actual time=0.123..0.733 rows=496 loops=1)
  Output: id, configuration
  Recheck Cond: ((application_settings.configuration -> 'subscriberCodes'::text) ? 'A555'::text)
  Heap Blocks: exact=450
  -> Bitmap Index Scan on application_settings_expr_idx (cost=0.00..27.00 rows=2000 width=0) (actual time=0.070..0.070 rows=496 loops=1)
        Index Cond: ((application_settings.configuration -> 'subscriberCodes'::text) ? 'A555'::text)
Planning Time: 0.174 ms
Execution Time: 0.777 ms
EXPLAIN
ROLLBACK