mirror of
				https://github.com/postgres/postgres.git
				synced 2025-11-01 21:31:19 +03:00 
			
		
		
		
	Adds bool opclass to btree_gist extension, to allow creating GiST indexes on bool columns. GiST indexes on a single bool column don't seem particularly useful, but this allows defining exclusion constraings involving a bool column, for example. Author: Emre Hasegeli Reviewed-by: Andrey Borodin Discussion: https://postgr.es/m/CAE2gYzyDKJBZngssR84VGZEN=Ux=V9FV23QfPgo+7-yYnKKg4g@mail.gmail.com
		
			
				
	
	
		
			97 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			97 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
-- bool check
 | 
						|
CREATE TABLE booltmp (a bool);
 | 
						|
INSERT INTO booltmp VALUES (false), (true);
 | 
						|
SET enable_seqscan=on;
 | 
						|
SELECT count(*) FROM booltmp WHERE a <  true;
 | 
						|
 count 
 | 
						|
-------
 | 
						|
     1
 | 
						|
(1 row)
 | 
						|
 | 
						|
SELECT count(*) FROM booltmp WHERE a <= true;
 | 
						|
 count 
 | 
						|
-------
 | 
						|
     2
 | 
						|
(1 row)
 | 
						|
 | 
						|
SELECT count(*) FROM booltmp WHERE a  = true;
 | 
						|
 count 
 | 
						|
-------
 | 
						|
     1
 | 
						|
(1 row)
 | 
						|
 | 
						|
SELECT count(*) FROM booltmp WHERE a >= true;
 | 
						|
 count 
 | 
						|
-------
 | 
						|
     1
 | 
						|
(1 row)
 | 
						|
 | 
						|
SELECT count(*) FROM booltmp WHERE a >  true;
 | 
						|
 count 
 | 
						|
-------
 | 
						|
     0
 | 
						|
(1 row)
 | 
						|
 | 
						|
CREATE INDEX boolidx ON booltmp USING gist ( a );
 | 
						|
SET enable_seqscan=off;
 | 
						|
SELECT count(*) FROM booltmp WHERE a <  true;
 | 
						|
 count 
 | 
						|
-------
 | 
						|
     1
 | 
						|
(1 row)
 | 
						|
 | 
						|
SELECT count(*) FROM booltmp WHERE a <= true;
 | 
						|
 count 
 | 
						|
-------
 | 
						|
     2
 | 
						|
(1 row)
 | 
						|
 | 
						|
SELECT count(*) FROM booltmp WHERE a  = true;
 | 
						|
 count 
 | 
						|
-------
 | 
						|
     1
 | 
						|
(1 row)
 | 
						|
 | 
						|
SELECT count(*) FROM booltmp WHERE a >= true;
 | 
						|
 count 
 | 
						|
-------
 | 
						|
     1
 | 
						|
(1 row)
 | 
						|
 | 
						|
SELECT count(*) FROM booltmp WHERE a >  true;
 | 
						|
 count 
 | 
						|
-------
 | 
						|
     0
 | 
						|
(1 row)
 | 
						|
 | 
						|
-- Test index-only scans
 | 
						|
SET enable_bitmapscan=off;
 | 
						|
EXPLAIN (COSTS OFF)
 | 
						|
SELECT * FROM booltmp WHERE a;
 | 
						|
                QUERY PLAN                
 | 
						|
------------------------------------------
 | 
						|
 Index Only Scan using boolidx on booltmp
 | 
						|
   Filter: a
 | 
						|
(2 rows)
 | 
						|
 | 
						|
SELECT * FROM booltmp WHERE a;
 | 
						|
 a 
 | 
						|
---
 | 
						|
 t
 | 
						|
(1 row)
 | 
						|
 | 
						|
EXPLAIN (COSTS OFF)
 | 
						|
SELECT * FROM booltmp WHERE NOT a;
 | 
						|
                QUERY PLAN                
 | 
						|
------------------------------------------
 | 
						|
 Index Only Scan using boolidx on booltmp
 | 
						|
   Filter: (NOT a)
 | 
						|
(2 rows)
 | 
						|
 | 
						|
SELECT * FROM booltmp WHERE NOT a;
 | 
						|
 a 
 | 
						|
---
 | 
						|
 f
 | 
						|
(1 row)
 | 
						|
 |