From: Matthew Schinckel Date: Fri, 23 Jan 2015 09:06:54 +0000 (+1030) Subject: Use array ALL() function, and remove json/jsonb casts X-Git-Url: https://git.8kb.co.uk/?p=postgresql%2Fpg_jsonb_delete_op;a=commitdiff_plain;h=dfe2d929120c61160c6ca192a65aafc2cd544d9f;hp=097d1712ac6bce8ffbca895101dacf8f33444e17 Use array ALL() function, and remove json/jsonb casts
[[local]:5432] matt@~ =# EXPLAIN ANALYZE SELECT to_json('x2'::text)::jsonb ?| ARRAY['x', 'y'] FROM generate_series(1,100000);
                                                        QUERY PLAN
--------------------------------------------------------------------------------------------------------------------------
 Function Scan on generate_series  (cost=0.00..20.00 rows=1000 width=0) (actual time=23.261..357.720 rows=100000 loops=1)
 Planning time: 0.051 ms
 Execution time: 376.334 ms
(3 rows)

Time: 376.732 ms

[[local]:5432] matt@~ =# EXPLAIN ANALYZE SELECT 'x2' <> ALL( ARRAY['x', 'y']) FROM generate_series(1,100000);
                                                       QUERY PLAN
-------------------------------------------------------------------------------------------------------------------------
 Function Scan on generate_series  (cost=0.00..12.50 rows=1000 width=0) (actual time=22.687..59.327 rows=100000 loops=1)
 Planning time: 0.112 ms
 Execution time: 71.561 ms
(3 rows)

Time: 72.162 ms
--- diff --git a/pg_jsonb_delete_op.sql b/pg_jsonb_delete_op.sql index 4f559c8..5671a35 100755 --- a/pg_jsonb_delete_op.sql +++ b/pg_jsonb_delete_op.sql @@ -31,7 +31,7 @@ $BODY$ ( SELECT ('{' || string_agg(to_json(key) || ':' || value, ',') || '}') FROM jsonb_each(a) - WHERE NOT to_json(key)::jsonb ?| b + WHERE key <> ALL(b) ) , '{}')::jsonb; $BODY$