mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-08-27 23:07:19 +02:00
We can revert the code changes of commitb5febc1d1
now, because commit9a3ddeb51
installed a real solution for the difficulty thatb5febc1d1
just dodged, namely that the planner might pick the wrong one of several index columns nominally containing the same value. It only matters which one we pick if we pick one that's not returnable, and that mistake is now foreclosed. Although both of the aforementioned commits were back-patched, I don't feel a need to take any risk by back-patching this one. The cases that it improves are very corner-ish. Discussion: https://postgr.es/m/3179992.1641150853@sss.pgh.pa.us
102 lines
2.1 KiB
Plaintext
102 lines
2.1 KiB
Plaintext
-- inet check
|
|
CREATE TABLE inettmp (a inet);
|
|
\copy inettmp from 'data/inet.data'
|
|
SET enable_seqscan=on;
|
|
SELECT count(*) FROM inettmp WHERE a < '89.225.196.191';
|
|
count
|
|
-------
|
|
213
|
|
(1 row)
|
|
|
|
SELECT count(*) FROM inettmp WHERE a <= '89.225.196.191';
|
|
count
|
|
-------
|
|
214
|
|
(1 row)
|
|
|
|
SELECT count(*) FROM inettmp WHERE a = '89.225.196.191';
|
|
count
|
|
-------
|
|
1
|
|
(1 row)
|
|
|
|
SELECT count(*) FROM inettmp WHERE a >= '89.225.196.191';
|
|
count
|
|
-------
|
|
387
|
|
(1 row)
|
|
|
|
SELECT count(*) FROM inettmp WHERE a > '89.225.196.191';
|
|
count
|
|
-------
|
|
386
|
|
(1 row)
|
|
|
|
CREATE INDEX inetidx ON inettmp USING gist ( a );
|
|
SET enable_seqscan=off;
|
|
SELECT count(*) FROM inettmp WHERE a < '89.225.196.191'::inet;
|
|
count
|
|
-------
|
|
213
|
|
(1 row)
|
|
|
|
SELECT count(*) FROM inettmp WHERE a <= '89.225.196.191'::inet;
|
|
count
|
|
-------
|
|
214
|
|
(1 row)
|
|
|
|
SELECT count(*) FROM inettmp WHERE a = '89.225.196.191'::inet;
|
|
count
|
|
-------
|
|
1
|
|
(1 row)
|
|
|
|
SELECT count(*) FROM inettmp WHERE a >= '89.225.196.191'::inet;
|
|
count
|
|
-------
|
|
387
|
|
(1 row)
|
|
|
|
SELECT count(*) FROM inettmp WHERE a > '89.225.196.191'::inet;
|
|
count
|
|
-------
|
|
386
|
|
(1 row)
|
|
|
|
VACUUM ANALYZE inettmp;
|
|
-- gist_inet_ops lacks a fetch function, so this should not be index-only scan
|
|
EXPLAIN (COSTS OFF)
|
|
SELECT count(*) FROM inettmp WHERE a = '89.225.196.191'::inet;
|
|
QUERY PLAN
|
|
--------------------------------------------------
|
|
Aggregate
|
|
-> Index Scan using inetidx on inettmp
|
|
Index Cond: (a = '89.225.196.191'::inet)
|
|
(3 rows)
|
|
|
|
SELECT count(*) FROM inettmp WHERE a = '89.225.196.191'::inet;
|
|
count
|
|
-------
|
|
1
|
|
(1 row)
|
|
|
|
DROP INDEX inetidx;
|
|
CREATE INDEX ON inettmp USING gist (a gist_inet_ops, a inet_ops);
|
|
-- this can be an index-only scan, as long as the planner uses the right column
|
|
EXPLAIN (COSTS OFF)
|
|
SELECT count(*) FROM inettmp WHERE a = '89.225.196.191'::inet;
|
|
QUERY PLAN
|
|
---------------------------------------------------------
|
|
Aggregate
|
|
-> Index Only Scan using inettmp_a_a1_idx on inettmp
|
|
Index Cond: (a = '89.225.196.191'::inet)
|
|
(3 rows)
|
|
|
|
SELECT count(*) FROM inettmp WHERE a = '89.225.196.191'::inet;
|
|
count
|
|
-------
|
|
1
|
|
(1 row)
|
|
|