mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-12-27 08:39:28 +08:00
8436489c81
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)
|
|
|