mirror of
https://github.com/postgres/postgres.git
synced 2025-06-11 20:28:21 +03:00
Add btree_gist support for enum types.
This will allow enums to be used in exclusion constraints. The code uses the new CallerFInfoFunctionCall infrastructure in fmgr, and the support for it added to btree_gist in commit 393bb504d7. Reviewed by Tom Lane and Anastasia Lubennikova Discussion: http://postgr.es/m/56EA8A71.8060107@dunslane.net
This commit is contained in:
91
contrib/btree_gist/expected/enum.out
Normal file
91
contrib/btree_gist/expected/enum.out
Normal file
@ -0,0 +1,91 @@
|
||||
-- enum check
|
||||
create type rainbow as enum ('r','o','y','g','b','i','v');
|
||||
CREATE TABLE enumtmp (a rainbow);
|
||||
\copy enumtmp from 'data/enum.data'
|
||||
SET enable_seqscan=on;
|
||||
select a, count(*) from enumtmp group by a order by 1;
|
||||
a | count
|
||||
---+-------
|
||||
r | 76
|
||||
o | 78
|
||||
y | 73
|
||||
g | 75
|
||||
b | 77
|
||||
i | 78
|
||||
v | 75
|
||||
| 63
|
||||
(8 rows)
|
||||
|
||||
SELECT count(*) FROM enumtmp WHERE a < 'g'::rainbow;
|
||||
count
|
||||
-------
|
||||
227
|
||||
(1 row)
|
||||
|
||||
SELECT count(*) FROM enumtmp WHERE a <= 'g'::rainbow;
|
||||
count
|
||||
-------
|
||||
302
|
||||
(1 row)
|
||||
|
||||
SELECT count(*) FROM enumtmp WHERE a = 'g'::rainbow;
|
||||
count
|
||||
-------
|
||||
75
|
||||
(1 row)
|
||||
|
||||
SELECT count(*) FROM enumtmp WHERE a >= 'g'::rainbow;
|
||||
count
|
||||
-------
|
||||
305
|
||||
(1 row)
|
||||
|
||||
SELECT count(*) FROM enumtmp WHERE a > 'g'::rainbow;
|
||||
count
|
||||
-------
|
||||
230
|
||||
(1 row)
|
||||
|
||||
CREATE INDEX enumidx ON enumtmp USING gist ( a );
|
||||
SET enable_seqscan=off;
|
||||
SELECT count(*) FROM enumtmp WHERE a < 'g'::rainbow;
|
||||
count
|
||||
-------
|
||||
227
|
||||
(1 row)
|
||||
|
||||
SELECT count(*) FROM enumtmp WHERE a <= 'g'::rainbow;
|
||||
count
|
||||
-------
|
||||
302
|
||||
(1 row)
|
||||
|
||||
SELECT count(*) FROM enumtmp WHERE a = 'g'::rainbow;
|
||||
count
|
||||
-------
|
||||
75
|
||||
(1 row)
|
||||
|
||||
SELECT count(*) FROM enumtmp WHERE a >= 'g'::rainbow;
|
||||
count
|
||||
-------
|
||||
305
|
||||
(1 row)
|
||||
|
||||
SELECT count(*) FROM enumtmp WHERE a > 'g'::rainbow;
|
||||
count
|
||||
-------
|
||||
230
|
||||
(1 row)
|
||||
|
||||
EXPLAIN (COSTS OFF)
|
||||
SELECT count(*) FROM enumtmp WHERE a >= 'g'::rainbow;
|
||||
QUERY PLAN
|
||||
-----------------------------------------------
|
||||
Aggregate
|
||||
-> Bitmap Heap Scan on enumtmp
|
||||
Recheck Cond: (a >= 'g'::rainbow)
|
||||
-> Bitmap Index Scan on enumidx
|
||||
Index Cond: (a >= 'g'::rainbow)
|
||||
(5 rows)
|
||||
|
Reference in New Issue
Block a user