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 precision
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