1+ \c postgres
2+ drop database if exists jaytest;
3+ create database jaytest ;
4+ \c jaytest
5+
6+ create schema jaytest ;
7+ set search_path to jaytest;
8+
9+ \timing
10+
11+ create extension cube;
12+
13+ set work_mem to ' 1GB' ;
14+ set maintenance_work_mem to ' 1GB' ;
15+
16+ create operator < - > (
17+ procedure = cube_distance,
18+ leftarg = cube,
19+ rightarg = cube,
20+ commutator = < - > );
21+
22+ CREATE OR REPLACE FUNCTION g_cube_distance (internal, cube, integer , oid )
23+ returns double prec
7440
ision
24+ language c immutable strict
25+ as ' $libdir/cube' ;
26+
27+ alter operator family gist_cube_ops using gist add
28+ operator 15 < - > (cube,cube) for order by float_ops,
29+ function 8 (cube,cube) g_cube_distance(internal,cube,integer ,oid );
30+
31+
32+ create table cubetest (
33+ position cube
34+ );
35+
36+ insert into cubetest (position)
37+ select cube(array[random() * 1000 , random() * 1000 , random() * 1000 ,random() * 1000 , random() * 1000 , random() * 1000 ]) from generate_series(1 ,10000000 );
38+ create index q on cubetest using gist(position);
39+
40+ select * , position < - > cube(array[500 ,500 ,500 ,500 ,500 ,500 ]) as p from cubetest order by p limit 10 ;
41+ select * , position < - > cube(array[500 ,500 ,500 ,500 ,500 ,500 ]) as p from cubetest order by p limit 10 ;
42+ select * , cube_distance(position, cube(array[500 ,500 ,500 ,500 ,500 ,500 ])) as p from cubetest order by p limit 10 ;
0 commit comments