mirror of
				https://github.com/postgres/postgres.git
				synced 2025-11-03 09:13:20 +03:00 
			
		
		
		
	This extends GiST's support for nearest-neighbor searches to many of the standard data types. Teodor Sigaev
		
			
				
	
	
		
			212 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			212 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
-- timestamptz check
 | 
						|
CREATE TABLE timestamptztmp (a timestamptz);
 | 
						|
\copy timestamptztmp from 'data/timestamptz.data'
 | 
						|
SET enable_seqscan=on;
 | 
						|
SELECT count(*) FROM timestamptztmp WHERE a <  '2018-12-18 10:59:54 GMT+3';
 | 
						|
 count 
 | 
						|
-------
 | 
						|
   391
 | 
						|
(1 row)
 | 
						|
 | 
						|
SELECT count(*) FROM timestamptztmp WHERE a <= '2018-12-18 10:59:54 GMT+3';
 | 
						|
 count 
 | 
						|
-------
 | 
						|
   392
 | 
						|
(1 row)
 | 
						|
 | 
						|
SELECT count(*) FROM timestamptztmp WHERE a  = '2018-12-18 10:59:54 GMT+3';
 | 
						|
 count 
 | 
						|
-------
 | 
						|
     1
 | 
						|
(1 row)
 | 
						|
 | 
						|
SELECT count(*) FROM timestamptztmp WHERE a >= '2018-12-18 10:59:54 GMT+3';
 | 
						|
 count 
 | 
						|
-------
 | 
						|
   158
 | 
						|
(1 row)
 | 
						|
 | 
						|
SELECT count(*) FROM timestamptztmp WHERE a >  '2018-12-18 10:59:54 GMT+3';
 | 
						|
 count 
 | 
						|
-------
 | 
						|
   157
 | 
						|
(1 row)
 | 
						|
 | 
						|
SELECT count(*) FROM timestamptztmp WHERE a <  '2018-12-18 10:59:54 GMT+2';
 | 
						|
 count 
 | 
						|
-------
 | 
						|
   391
 | 
						|
(1 row)
 | 
						|
 | 
						|
SELECT count(*) FROM timestamptztmp WHERE a <= '2018-12-18 10:59:54 GMT+2';
 | 
						|
 count 
 | 
						|
-------
 | 
						|
   391
 | 
						|
(1 row)
 | 
						|
 | 
						|
SELECT count(*) FROM timestamptztmp WHERE a  = '2018-12-18 10:59:54 GMT+2';
 | 
						|
 count 
 | 
						|
-------
 | 
						|
     0
 | 
						|
(1 row)
 | 
						|
 | 
						|
SELECT count(*) FROM timestamptztmp WHERE a >= '2018-12-18 10:59:54 GMT+2';
 | 
						|
 count 
 | 
						|
-------
 | 
						|
   158
 | 
						|
(1 row)
 | 
						|
 | 
						|
SELECT count(*) FROM timestamptztmp WHERE a >  '2018-12-18 10:59:54 GMT+2';
 | 
						|
 count 
 | 
						|
-------
 | 
						|
   158
 | 
						|
(1 row)
 | 
						|
 | 
						|
SELECT count(*) FROM timestamptztmp WHERE a <  '2018-12-18 10:59:54 GMT+4';
 | 
						|
 count 
 | 
						|
-------
 | 
						|
   392
 | 
						|
(1 row)
 | 
						|
 | 
						|
SELECT count(*) FROM timestamptztmp WHERE a <= '2018-12-18 10:59:54 GMT+4';
 | 
						|
 count 
 | 
						|
-------
 | 
						|
   392
 | 
						|
(1 row)
 | 
						|
 | 
						|
SELECT count(*) FROM timestamptztmp WHERE a  = '2018-12-18 10:59:54 GMT+4';
 | 
						|
 count 
 | 
						|
-------
 | 
						|
     0
 | 
						|
(1 row)
 | 
						|
 | 
						|
SELECT count(*) FROM timestamptztmp WHERE a >= '2018-12-18 10:59:54 GMT+4';
 | 
						|
 count 
 | 
						|
-------
 | 
						|
   157
 | 
						|
(1 row)
 | 
						|
 | 
						|
SELECT count(*) FROM timestamptztmp WHERE a >  '2018-12-18 10:59:54 GMT+4';
 | 
						|
 count 
 | 
						|
-------
 | 
						|
   157
 | 
						|
(1 row)
 | 
						|
 | 
						|
SELECT a, a <-> '2018-12-18 10:59:54 GMT+2' FROM timestamptztmp ORDER BY a <-> '2018-12-18 10:59:54 GMT+2' LIMIT 3;
 | 
						|
              a               |             ?column?              
 | 
						|
------------------------------+-----------------------------------
 | 
						|
 Tue Dec 18 05:59:54 2018 PST | @ 1 hour
 | 
						|
 Thu Jan 10 03:01:34 2019 PST | @ 22 days 22 hours 1 min 40 secs
 | 
						|
 Thu Jan 24 12:28:12 2019 PST | @ 37 days 7 hours 28 mins 18 secs
 | 
						|
(3 rows)
 | 
						|
 | 
						|
CREATE INDEX timestamptzidx ON timestamptztmp USING gist ( a );
 | 
						|
SET enable_seqscan=off;
 | 
						|
SELECT count(*) FROM timestamptztmp WHERE a <  '2018-12-18 10:59:54 GMT+3'::timestamptz;
 | 
						|
 count 
 | 
						|
-------
 | 
						|
   391
 | 
						|
(1 row)
 | 
						|
 | 
						|
SELECT count(*) FROM timestamptztmp WHERE a <= '2018-12-18 10:59:54 GMT+3'::timestamptz;
 | 
						|
 count 
 | 
						|
-------
 | 
						|
   392
 | 
						|
(1 row)
 | 
						|
 | 
						|
SELECT count(*) FROM timestamptztmp WHERE a  = '2018-12-18 10:59:54 GMT+3'::timestamptz;
 | 
						|
 count 
 | 
						|
-------
 | 
						|
     1
 | 
						|
(1 row)
 | 
						|
 | 
						|
SELECT count(*) FROM timestamptztmp WHERE a >= '2018-12-18 10:59:54 GMT+3'::timestamptz;
 | 
						|
 count 
 | 
						|
-------
 | 
						|
   158
 | 
						|
(1 row)
 | 
						|
 | 
						|
SELECT count(*) FROM timestamptztmp WHERE a >  '2018-12-18 10:59:54 GMT+3'::timestamptz;
 | 
						|
 count 
 | 
						|
-------
 | 
						|
   157
 | 
						|
(1 row)
 | 
						|
 | 
						|
SELECT count(*) FROM timestamptztmp WHERE a <  '2018-12-18 10:59:54 GMT+2'::timestamptz;
 | 
						|
 count 
 | 
						|
-------
 | 
						|
   391
 | 
						|
(1 row)
 | 
						|
 | 
						|
SELECT count(*) FROM timestamptztmp WHERE a <= '2018-12-18 10:59:54 GMT+2'::timestamptz;
 | 
						|
 count 
 | 
						|
-------
 | 
						|
   391
 | 
						|
(1 row)
 | 
						|
 | 
						|
SELECT count(*) FROM timestamptztmp WHERE a  = '2018-12-18 10:59:54 GMT+2'::timestamptz;
 | 
						|
 count 
 | 
						|
-------
 | 
						|
     0
 | 
						|
(1 row)
 | 
						|
 | 
						|
SELECT count(*) FROM timestamptztmp WHERE a >= '2018-12-18 10:59:54 GMT+2'::timestamptz;
 | 
						|
 count 
 | 
						|
-------
 | 
						|
   158
 | 
						|
(1 row)
 | 
						|
 | 
						|
SELECT count(*) FROM timestamptztmp WHERE a >  '2018-12-18 10:59:54 GMT+2'::timestamptz;
 | 
						|
 count 
 | 
						|
-------
 | 
						|
   158
 | 
						|
(1 row)
 | 
						|
 | 
						|
SELECT count(*) FROM timestamptztmp WHERE a <  '2018-12-18 10:59:54 GMT+4'::timestamptz;
 | 
						|
 count 
 | 
						|
-------
 | 
						|
   392
 | 
						|
(1 row)
 | 
						|
 | 
						|
SELECT count(*) FROM timestamptztmp WHERE a <= '2018-12-18 10:59:54 GMT+4'::timestamptz;
 | 
						|
 count 
 | 
						|
-------
 | 
						|
   392
 | 
						|
(1 row)
 | 
						|
 | 
						|
SELECT count(*) FROM timestamptztmp WHERE a  = '2018-12-18 10:59:54 GMT+4'::timestamptz;
 | 
						|
 count 
 | 
						|
-------
 | 
						|
     0
 | 
						|
(1 row)
 | 
						|
 | 
						|
SELECT count(*) FROM timestamptztmp WHERE a >= '2018-12-18 10:59:54 GMT+4'::timestamptz;
 | 
						|
 count 
 | 
						|
-------
 | 
						|
   157
 | 
						|
(1 row)
 | 
						|
 | 
						|
SELECT count(*) FROM timestamptztmp WHERE a >  '2018-12-18 10:59:54 GMT+4'::timestamptz;
 | 
						|
 count 
 | 
						|
-------
 | 
						|
   157
 | 
						|
(1 row)
 | 
						|
 | 
						|
EXPLAIN (COSTS OFF)
 | 
						|
SELECT a, a <-> '2018-12-18 10:59:54 GMT+2' FROM timestamptztmp ORDER BY a <-> '2018-12-18 10:59:54 GMT+2' LIMIT 3;
 | 
						|
                                     QUERY PLAN                                     
 | 
						|
------------------------------------------------------------------------------------
 | 
						|
 Limit
 | 
						|
   ->  Index Scan using timestamptzidx on timestamptztmp
 | 
						|
         Order By: (a <-> 'Tue Dec 18 04:59:54 2018 PST'::timestamp with time zone)
 | 
						|
(3 rows)
 | 
						|
 | 
						|
SELECT a, a <-> '2018-12-18 10:59:54 GMT+2' FROM timestamptztmp ORDER BY a <-> '2018-12-18 10:59:54 GMT+2' LIMIT 3;
 | 
						|
              a               |             ?column?              
 | 
						|
------------------------------+-----------------------------------
 | 
						|
 Tue Dec 18 05:59:54 2018 PST | @ 1 hour
 | 
						|
 Thu Jan 10 03:01:34 2019 PST | @ 22 days 22 hours 1 min 40 secs
 | 
						|
 Thu Jan 24 12:28:12 2019 PST | @ 37 days 7 hours 28 mins 18 secs
 | 
						|
(3 rows)
 | 
						|
 |