mirror of
				https://github.com/postgres/postgres.git
				synced 2025-11-04 00:02:52 -05:00 
			
		
		
		
	Extend the infrastructure in btree_gin.c to permit cross-type operators, and add the code to support them for the int2, int4, and int8 opclasses. (To keep this patch digestible, I left the other datatypes for a separate patch.) This improves the usability of btree_gin indexes by allowing them to support the same set of queries that a regular btree index does. Author: Tom Lane <tgl@sss.pgh.pa.us> Reviewed-by: Arseniy Mukhin <arseniy.mukhin.dev@gmail.com> Discussion: https://postgr.es/m/262624.1738460652@sss.pgh.pa.us
		
			
				
	
	
		
			145 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			145 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
set enable_seqscan=off;
 | 
						|
CREATE TABLE test_int8 (
 | 
						|
	i int8
 | 
						|
);
 | 
						|
INSERT INTO test_int8 VALUES (-2),(-1),(0),(1),(2),(3);
 | 
						|
CREATE INDEX idx_int8 ON test_int8 USING gin (i);
 | 
						|
SELECT * FROM test_int8 WHERE i<1::int8 ORDER BY i;
 | 
						|
 i  
 | 
						|
----
 | 
						|
 -2
 | 
						|
 -1
 | 
						|
  0
 | 
						|
(3 rows)
 | 
						|
 | 
						|
SELECT * FROM test_int8 WHERE i<=1::int8 ORDER BY i;
 | 
						|
 i  
 | 
						|
----
 | 
						|
 -2
 | 
						|
 -1
 | 
						|
  0
 | 
						|
  1
 | 
						|
(4 rows)
 | 
						|
 | 
						|
SELECT * FROM test_int8 WHERE i=1::int8 ORDER BY i;
 | 
						|
 i 
 | 
						|
---
 | 
						|
 1
 | 
						|
(1 row)
 | 
						|
 | 
						|
SELECT * FROM test_int8 WHERE i>=1::int8 ORDER BY i;
 | 
						|
 i 
 | 
						|
---
 | 
						|
 1
 | 
						|
 2
 | 
						|
 3
 | 
						|
(3 rows)
 | 
						|
 | 
						|
SELECT * FROM test_int8 WHERE i>1::int8 ORDER BY i;
 | 
						|
 i 
 | 
						|
---
 | 
						|
 2
 | 
						|
 3
 | 
						|
(2 rows)
 | 
						|
 | 
						|
explain (costs off)
 | 
						|
SELECT * FROM test_int8 WHERE i<1::int2 ORDER BY i;
 | 
						|
                  QUERY PLAN                   
 | 
						|
-----------------------------------------------
 | 
						|
 Sort
 | 
						|
   Sort Key: i
 | 
						|
   ->  Bitmap Heap Scan on test_int8
 | 
						|
         Recheck Cond: (i < '1'::smallint)
 | 
						|
         ->  Bitmap Index Scan on idx_int8
 | 
						|
               Index Cond: (i < '1'::smallint)
 | 
						|
(6 rows)
 | 
						|
 | 
						|
SELECT * FROM test_int8 WHERE i<1::int2 ORDER BY i;
 | 
						|
 i  
 | 
						|
----
 | 
						|
 -2
 | 
						|
 -1
 | 
						|
  0
 | 
						|
(3 rows)
 | 
						|
 | 
						|
SELECT * FROM test_int8 WHERE i<=1::int2 ORDER BY i;
 | 
						|
 i  
 | 
						|
----
 | 
						|
 -2
 | 
						|
 -1
 | 
						|
  0
 | 
						|
  1
 | 
						|
(4 rows)
 | 
						|
 | 
						|
SELECT * FROM test_int8 WHERE i=1::int2 ORDER BY i;
 | 
						|
 i 
 | 
						|
---
 | 
						|
 1
 | 
						|
(1 row)
 | 
						|
 | 
						|
SELECT * FROM test_int8 WHERE i>=1::int2 ORDER BY i;
 | 
						|
 i 
 | 
						|
---
 | 
						|
 1
 | 
						|
 2
 | 
						|
 3
 | 
						|
(3 rows)
 | 
						|
 | 
						|
SELECT * FROM test_int8 WHERE i>1::int2 ORDER BY i;
 | 
						|
 i 
 | 
						|
---
 | 
						|
 2
 | 
						|
 3
 | 
						|
(2 rows)
 | 
						|
 | 
						|
explain (costs off)
 | 
						|
SELECT * FROM test_int8 WHERE i<1::int4 ORDER BY i;
 | 
						|
                QUERY PLAN                 
 | 
						|
-------------------------------------------
 | 
						|
 Sort
 | 
						|
   Sort Key: i
 | 
						|
   ->  Bitmap Heap Scan on test_int8
 | 
						|
         Recheck Cond: (i < 1)
 | 
						|
         ->  Bitmap Index Scan on idx_int8
 | 
						|
               Index Cond: (i < 1)
 | 
						|
(6 rows)
 | 
						|
 | 
						|
SELECT * FROM test_int8 WHERE i<1::int4 ORDER BY i;
 | 
						|
 i  
 | 
						|
----
 | 
						|
 -2
 | 
						|
 -1
 | 
						|
  0
 | 
						|
(3 rows)
 | 
						|
 | 
						|
SELECT * FROM test_int8 WHERE i<=1::int4 ORDER BY i;
 | 
						|
 i  
 | 
						|
----
 | 
						|
 -2
 | 
						|
 -1
 | 
						|
  0
 | 
						|
  1
 | 
						|
(4 rows)
 | 
						|
 | 
						|
SELECT * FROM test_int8 WHERE i=1::int4 ORDER BY i;
 | 
						|
 i 
 | 
						|
---
 | 
						|
 1
 | 
						|
(1 row)
 | 
						|
 | 
						|
SELECT * FROM test_int8 WHERE i>=1::int4 ORDER BY i;
 | 
						|
 i 
 | 
						|
---
 | 
						|
 1
 | 
						|
 2
 | 
						|
 3
 | 
						|
(3 rows)
 | 
						|
 | 
						|
SELECT * FROM test_int8 WHERE i>1::int4 ORDER BY i;
 | 
						|
 i 
 | 
						|
---
 | 
						|
 2
 | 
						|
 3
 | 
						|
(2 rows)
 | 
						|
 |