/
githubmirror
/
postgres
Обзор
Документация
Войти
/
githubmirror
/
postgres
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
contrib/btree_gist/expected/float8.out
126 строк
3 KB
Tom Lane
btree_gist: fix NaN handling in float4/float8 opclasses.
01 июл 2026, 20:27
01 июл 2026, 20:27
7d34489
Код
Авторство
О чём код?
-- float8 check CREATE TABLE float8tmp (a float8); \copy float8tmp from 'data/float8.data' SET enable_seqscan=on; SELECT count(*) FROM float8tmp WHERE a < -1890.0; count ------- 238 (1 row) SELECT count(*) FROM float8tmp WHERE a <= -1890.0; count ------- 239 (1 row) SELECT count(*) FROM float8tmp WHERE a = -1890.0; count ------- 1 (1 row) SELECT count(*) FROM float8tmp WHERE a >= -1890.0; count ------- 309 (1 row) SELECT count(*) FROM float8tmp WHERE a > -1890.0; count ------- 308 (1 row) SELECT a, a <-> '-1890.0' FROM float8tmp ORDER BY a <-> '-1890.0' LIMIT 3; a | ?column? --------------+-------------------- -1890 | 0 -2003.634512 | 113.63451200000009 -1769.73634 | 120.26366000000007 (3 rows) CREATE INDEX float8idx ON float8tmp USING gist ( a ); SET enable_seqscan=off; SELECT count(*) FROM float8tmp WHERE a < -1890.0::float8; count ------- 238 (1 row) SELECT count(*) FROM float8tmp WHERE a <= -1890.0::float8; count ------- 239 (1 row) SELECT count(*) FROM float8tmp WHERE a = -1890.0::float8; count ------- 1 (1 row) SELECT count(*) FROM float8tmp WHERE a >= -1890.0::float8; count ------- 309 (1 row) SELECT count(*) FROM float8tmp WHERE a > -1890.0::float8; count ------- 308 (1 row) EXPLAIN (COSTS OFF) SELECT a, a <-> '-1890.0' FROM float8tmp ORDER BY a <-> '-1890.0' LIMIT 3; QUERY PLAN ----------------------------------------------------- Limit -> Index Only Scan using float8idx on float8tmp Order By: (a <-> '-1890'::double precision) (3 rows) SELECT a, a <-> '-1890.0' FROM float8tmp ORDER BY a <-> '-1890.0' LIMIT 3; a | ?column? --------------+-------------------- -1890 | 0 -2003.634512 | 113.63451200000009 -1769.73634 | 120.26366000000007 (3 rows) -- EXCLUDE constraint must block a duplicate NaN, same as it does for finite -- values. CREATE TABLE float8excl (a float8, EXCLUDE USING gist (a WITH =)); INSERT INTO float8excl VALUES ('NaN'::float8); INSERT INTO float8excl VALUES ('NaN'::float8); -- expect: violates EXCLUDE ERROR: conflicting key value violates exclusion constraint "float8excl_a_excl" DETAIL: Key (a)=(NaN) conflicts with existing key (a)=(NaN). SELECT count(*) FROM float8excl; count ------- 1 (1 row) -- Test double-column index CREATE INDEX float8idx2 ON float8tmp USING gist ( a, abs(a) ); EXPLAIN (COSTS OFF) SELECT count(*) FROM float8tmp WHERE abs(a) = 1890.0::float8; QUERY PLAN --------------------------------------------------------------- Aggregate -> Bitmap Heap Scan on float8tmp Recheck Cond: (abs(a) = '1890'::double precision) -> Bitmap Index Scan on float8idx2 Index Cond: (abs(a) = '1890'::double precision) (5 rows) SELECT count(*) FROM float8tmp WHERE abs(a) = 1890.0::float8; count ------- 1 (1 row) RESET enable_seqscan; RESET enable_indexscan; RESET enable_bitmapscan;