mirror of
https://github.com/pgvector/pgvector.git
synced 2026-06-06 05:51:21 +08:00
Moved sql and test files
This commit is contained in:
@@ -1,12 +0,0 @@
|
||||
SET client_min_messages = warning;
|
||||
CREATE EXTENSION IF NOT EXISTS vector;
|
||||
SET enable_seqscan = off;
|
||||
|
||||
CREATE TABLE t (val vector(3));
|
||||
INSERT INTO t (val) VALUES ('[0,0,0]'), ('[1,2,3]'), ('[1,1,1]'), (NULL);
|
||||
CREATE INDEX ON t (val);
|
||||
|
||||
SELECT * FROM t WHERE val = '[1,2,3]';
|
||||
SELECT * FROM t ORDER BY val LIMIT 1;
|
||||
|
||||
DROP TABLE t;
|
||||
11
sql/cast.sql
11
sql/cast.sql
@@ -1,11 +0,0 @@
|
||||
SET client_min_messages = warning;
|
||||
CREATE EXTENSION IF NOT EXISTS vector;
|
||||
|
||||
SELECT ARRAY[1,2,3]::vector;
|
||||
SELECT ARRAY[1,2,3]::float4[]::vector;
|
||||
SELECT ARRAY[1,2,3]::float8[]::vector;
|
||||
SELECT '{NULL}'::real[]::vector;
|
||||
SELECT '{NaN}'::real[]::vector;
|
||||
SELECT '{Infinity}'::real[]::vector;
|
||||
SELECT '{-Infinity}'::real[]::vector;
|
||||
SELECT '{}'::real[]::vector;
|
||||
15
sql/copy.sql
15
sql/copy.sql
@@ -1,15 +0,0 @@
|
||||
SET client_min_messages = warning;
|
||||
CREATE EXTENSION IF NOT EXISTS vector;
|
||||
|
||||
CREATE TABLE t (val vector(3));
|
||||
INSERT INTO t (val) VALUES ('[0,0,0]'), ('[1,2,3]'), ('[1,1,1]'), (NULL);
|
||||
|
||||
CREATE TABLE t2 (val vector(3));
|
||||
|
||||
\copy t TO '/tmp/data.bin' WITH (FORMAT binary)
|
||||
\copy t2 FROM '/tmp/data.bin' WITH (FORMAT binary)
|
||||
|
||||
SELECT * FROM t2 ORDER BY val;
|
||||
|
||||
DROP TABLE t;
|
||||
DROP TABLE t2;
|
||||
@@ -1,18 +0,0 @@
|
||||
SET client_min_messages = warning;
|
||||
CREATE EXTENSION IF NOT EXISTS vector;
|
||||
|
||||
SELECT '[1,2,3]'::vector + '[4,5,6]';
|
||||
SELECT '[1,2,3]'::vector - '[4,5,6]';
|
||||
|
||||
SELECT vector_dims('[1,2,3]');
|
||||
SELECT round(vector_norm('[1,1]')::numeric, 5);
|
||||
|
||||
SELECT round(l2_distance('[1,2]', '[0,0]')::numeric, 5);
|
||||
SELECT l2_distance('[1,2]', '[3]');
|
||||
|
||||
SELECT inner_product('[1,2]', '[3,4]');
|
||||
SELECT inner_product('[1,2]', '[3]');
|
||||
|
||||
SELECT round(cosine_distance('[1,2]', '[2,4]')::numeric, 5);
|
||||
SELECT cosine_distance('[1,2]', '[0,0]');
|
||||
SELECT cosine_distance('[1,2]', '[3]');
|
||||
@@ -1,14 +0,0 @@
|
||||
SET client_min_messages = warning;
|
||||
CREATE EXTENSION IF NOT EXISTS vector;
|
||||
SET enable_seqscan = off;
|
||||
|
||||
CREATE TABLE t (val vector(3));
|
||||
INSERT INTO t (val) VALUES ('[0,0,0]'), ('[1,2,3]'), ('[1,1,1]'), (NULL);
|
||||
CREATE INDEX ON t USING ivfflat (val vector_cosine_ops) WITH (lists = 1);
|
||||
|
||||
INSERT INTO t (val) VALUES ('[1,2,4]');
|
||||
|
||||
SELECT * FROM t ORDER BY val <=> '[3,3,3]';
|
||||
SELECT * FROM t ORDER BY val <=> (SELECT NULL::vector);
|
||||
|
||||
DROP TABLE t;
|
||||
@@ -1,14 +0,0 @@
|
||||
SET client_min_messages = warning;
|
||||
CREATE EXTENSION IF NOT EXISTS vector;
|
||||
SET enable_seqscan = off;
|
||||
|
||||
CREATE TABLE t (val vector(3));
|
||||
INSERT INTO t (val) VALUES ('[0,0,0]'), ('[1,2,3]'), ('[1,1,1]'), (NULL);
|
||||
CREATE INDEX ON t USING ivfflat (val vector_ip_ops) WITH (lists = 1);
|
||||
|
||||
INSERT INTO t (val) VALUES ('[1,2,4]');
|
||||
|
||||
SELECT * FROM t ORDER BY val <#> '[3,3,3]';
|
||||
SELECT * FROM t ORDER BY val <#> (SELECT NULL::vector);
|
||||
|
||||
DROP TABLE t;
|
||||
@@ -1,14 +0,0 @@
|
||||
SET client_min_messages = warning;
|
||||
CREATE EXTENSION IF NOT EXISTS vector;
|
||||
SET enable_seqscan = off;
|
||||
|
||||
CREATE TABLE t (val vector(3));
|
||||
INSERT INTO t (val) VALUES ('[0,0,0]'), ('[1,2,3]'), ('[1,1,1]'), (NULL);
|
||||
CREATE INDEX ON t USING ivfflat (val) WITH (lists = 1);
|
||||
|
||||
INSERT INTO t (val) VALUES ('[1,2,4]');
|
||||
|
||||
SELECT * FROM t ORDER BY val <-> '[3,3,3]';
|
||||
SELECT * FROM t ORDER BY val <-> (SELECT NULL::vector);
|
||||
|
||||
DROP TABLE t;
|
||||
@@ -1,11 +0,0 @@
|
||||
SET client_min_messages = warning;
|
||||
CREATE EXTENSION IF NOT EXISTS vector;
|
||||
SET enable_seqscan = off;
|
||||
|
||||
CREATE TABLE t (val vector(3));
|
||||
CREATE INDEX ON t USING ivfflat (val) WITH (lists = 0);
|
||||
CREATE INDEX ON t USING ivfflat (val) WITH (lists = 32769);
|
||||
|
||||
SHOW ivfflat.probes;
|
||||
|
||||
DROP TABLE t;
|
||||
@@ -1,11 +0,0 @@
|
||||
SET client_min_messages = warning;
|
||||
CREATE EXTENSION IF NOT EXISTS vector;
|
||||
SET enable_seqscan = off;
|
||||
|
||||
CREATE UNLOGGED TABLE t (val vector(3));
|
||||
INSERT INTO t (val) VALUES ('[0,0,0]'), ('[1,2,3]'), ('[1,1,1]'), (NULL);
|
||||
CREATE INDEX ON t USING ivfflat (val) WITH (lists = 1);
|
||||
|
||||
SELECT * FROM t ORDER BY val <-> '[3,3,3]';
|
||||
|
||||
DROP TABLE t;
|
||||
39
sql/vector--0.1.0--0.1.1.sql
Normal file
39
sql/vector--0.1.0--0.1.1.sql
Normal file
@@ -0,0 +1,39 @@
|
||||
-- complain if script is sourced in psql, rather than via CREATE EXTENSION
|
||||
\echo Use "ALTER EXTENSION vector UPDATE TO '0.1.1'" to load this file. \quit
|
||||
|
||||
CREATE FUNCTION vector_recv(internal, oid, integer) RETURNS vector
|
||||
AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT;
|
||||
|
||||
CREATE FUNCTION vector_send(vector) RETURNS bytea
|
||||
AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT;
|
||||
|
||||
ALTER TYPE vector SET ( RECEIVE = vector_recv, SEND = vector_send );
|
||||
|
||||
-- functions
|
||||
|
||||
ALTER FUNCTION vector_in(cstring, oid, integer) PARALLEL SAFE;
|
||||
ALTER FUNCTION vector_out(vector) PARALLEL SAFE;
|
||||
ALTER FUNCTION vector_typmod_in(cstring[]) PARALLEL SAFE;
|
||||
ALTER FUNCTION vector_recv(internal, oid, integer) PARALLEL SAFE;
|
||||
ALTER FUNCTION vector_send(vector) PARALLEL SAFE;
|
||||
ALTER FUNCTION l2_distance(vector, vector) PARALLEL SAFE;
|
||||
ALTER FUNCTION inner_product(vector, vector) PARALLEL SAFE;
|
||||
ALTER FUNCTION cosine_distance(vector, vector) PARALLEL SAFE;
|
||||
ALTER FUNCTION vector_dims(vector) PARALLEL SAFE;
|
||||
ALTER FUNCTION vector_norm(vector) PARALLEL SAFE;
|
||||
ALTER FUNCTION vector_add(vector, vector) PARALLEL SAFE;
|
||||
ALTER FUNCTION vector_sub(vector, vector) PARALLEL SAFE;
|
||||
ALTER FUNCTION vector_lt(vector, vector) PARALLEL SAFE;
|
||||
ALTER FUNCTION vector_le(vector, vector) PARALLEL SAFE;
|
||||
ALTER FUNCTION vector_eq(vector, vector) PARALLEL SAFE;
|
||||
ALTER FUNCTION vector_ne(vector, vector) PARALLEL SAFE;
|
||||
ALTER FUNCTION vector_ge(vector, vector) PARALLEL SAFE;
|
||||
ALTER FUNCTION vector_gt(vector, vector) PARALLEL SAFE;
|
||||
ALTER FUNCTION vector_cmp(vector, vector) PARALLEL SAFE;
|
||||
ALTER FUNCTION vector_l2_squared_distance(vector, vector) PARALLEL SAFE;
|
||||
ALTER FUNCTION vector_negative_inner_product(vector, vector) PARALLEL SAFE;
|
||||
ALTER FUNCTION vector_spherical_distance(vector, vector) PARALLEL SAFE;
|
||||
ALTER FUNCTION vector(vector, integer, boolean) PARALLEL SAFE;
|
||||
ALTER FUNCTION array_to_vector(integer[], integer, boolean) PARALLEL SAFE;
|
||||
ALTER FUNCTION array_to_vector(real[], integer, boolean) PARALLEL SAFE;
|
||||
ALTER FUNCTION array_to_vector(double precision[], integer, boolean) PARALLEL SAFE;
|
||||
218
sql/vector--0.1.1.sql
Normal file
218
sql/vector--0.1.1.sql
Normal file
@@ -0,0 +1,218 @@
|
||||
-- complain if script is sourced in psql, rather than via CREATE EXTENSION
|
||||
\echo Use "CREATE EXTENSION vector" to load this file. \quit
|
||||
|
||||
-- type
|
||||
|
||||
CREATE TYPE vector;
|
||||
|
||||
CREATE FUNCTION vector_in(cstring, oid, integer) RETURNS vector
|
||||
AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
|
||||
|
||||
CREATE FUNCTION vector_out(vector) RETURNS cstring
|
||||
AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
|
||||
|
||||
CREATE FUNCTION vector_typmod_in(cstring[]) RETURNS integer
|
||||
AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
|
||||
|
||||
CREATE FUNCTION vector_recv(internal, oid, integer) RETURNS vector
|
||||
AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
|
||||
|
||||
CREATE FUNCTION vector_send(vector) RETURNS bytea
|
||||
AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
|
||||
|
||||
CREATE TYPE vector (
|
||||
INPUT = vector_in,
|
||||
OUTPUT = vector_out,
|
||||
TYPMOD_IN = vector_typmod_in,
|
||||
RECEIVE = vector_recv,
|
||||
SEND = vector_send
|
||||
);
|
||||
|
||||
-- functions
|
||||
|
||||
CREATE FUNCTION l2_distance(vector, vector) RETURNS float8
|
||||
AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
|
||||
|
||||
CREATE FUNCTION inner_product(vector, vector) RETURNS float8
|
||||
AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
|
||||
|
||||
CREATE FUNCTION cosine_distance(vector, vector) RETURNS float8
|
||||
AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
|
||||
|
||||
CREATE FUNCTION vector_dims(vector) RETURNS integer
|
||||
AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
|
||||
|
||||
CREATE FUNCTION vector_norm(vector) RETURNS float8
|
||||
AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
|
||||
|
||||
CREATE FUNCTION vector_add(vector, vector) RETURNS vector
|
||||
AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
|
||||
|
||||
CREATE FUNCTION vector_sub(vector, vector) RETURNS vector
|
||||
AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
|
||||
|
||||
-- private functions
|
||||
|
||||
CREATE FUNCTION vector_lt(vector, vector) RETURNS bool
|
||||
AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
|
||||
|
||||
CREATE FUNCTION vector_le(vector, vector) RETURNS bool
|
||||
AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
|
||||
|
||||
CREATE FUNCTION vector_eq(vector, vector) RETURNS bool
|
||||
AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
|
||||
|
||||
CREATE FUNCTION vector_ne(vector, vector) RETURNS bool
|
||||
AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
|
||||
|
||||
CREATE FUNCTION vector_ge(vector, vector) RETURNS bool
|
||||
AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
|
||||
|
||||
CREATE FUNCTION vector_gt(vector, vector) RETURNS bool
|
||||
AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
|
||||
|
||||
CREATE FUNCTION vector_cmp(vector, vector) RETURNS int4
|
||||
AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
|
||||
|
||||
CREATE FUNCTION vector_l2_squared_distance(vector, vector) RETURNS float8
|
||||
AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
|
||||
|
||||
CREATE FUNCTION vector_negative_inner_product(vector, vector) RETURNS float8
|
||||
AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
|
||||
|
||||
CREATE FUNCTION vector_spherical_distance(vector, vector) RETURNS float8
|
||||
AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
|
||||
|
||||
-- cast functions
|
||||
|
||||
CREATE FUNCTION vector(vector, integer, boolean) RETURNS vector
|
||||
AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
|
||||
|
||||
CREATE FUNCTION array_to_vector(integer[], integer, boolean) RETURNS vector
|
||||
AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
|
||||
|
||||
CREATE FUNCTION array_to_vector(real[], integer, boolean) RETURNS vector
|
||||
AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
|
||||
|
||||
CREATE FUNCTION array_to_vector(double precision[], integer, boolean) RETURNS vector
|
||||
AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
|
||||
|
||||
-- casts
|
||||
|
||||
CREATE CAST (vector AS vector)
|
||||
WITH FUNCTION vector(vector, integer, boolean) AS IMPLICIT;
|
||||
|
||||
CREATE CAST (integer[] AS vector)
|
||||
WITH FUNCTION array_to_vector(integer[], integer, boolean) AS IMPLICIT;
|
||||
|
||||
CREATE CAST (real[] AS vector)
|
||||
WITH FUNCTION array_to_vector(real[], integer, boolean) AS IMPLICIT;
|
||||
|
||||
CREATE CAST (double precision[] AS vector)
|
||||
WITH FUNCTION array_to_vector(double precision[], integer, boolean) AS IMPLICIT;
|
||||
|
||||
-- operators
|
||||
|
||||
CREATE OPERATOR <-> (
|
||||
LEFTARG = vector, RIGHTARG = vector, PROCEDURE = l2_distance,
|
||||
COMMUTATOR = '<->'
|
||||
);
|
||||
|
||||
CREATE OPERATOR <#> (
|
||||
LEFTARG = vector, RIGHTARG = vector, PROCEDURE = vector_negative_inner_product,
|
||||
COMMUTATOR = '<#>'
|
||||
);
|
||||
|
||||
CREATE OPERATOR <=> (
|
||||
LEFTARG = vector, RIGHTARG = vector, PROCEDURE = cosine_distance,
|
||||
COMMUTATOR = '<=>'
|
||||
);
|
||||
|
||||
CREATE OPERATOR + (
|
||||
LEFTARG = vector, RIGHTARG = vector, PROCEDURE = vector_add,
|
||||
COMMUTATOR = +
|
||||
);
|
||||
|
||||
CREATE OPERATOR - (
|
||||
LEFTARG = vector, RIGHTARG = vector, PROCEDURE = vector_sub,
|
||||
COMMUTATOR = -
|
||||
);
|
||||
|
||||
CREATE OPERATOR < (
|
||||
LEFTARG = vector, RIGHTARG = vector, PROCEDURE = vector_lt,
|
||||
COMMUTATOR = > , NEGATOR = >= ,
|
||||
RESTRICT = scalarltsel, JOIN = scalarltjoinsel
|
||||
);
|
||||
|
||||
-- should use scalarlesel and scalarlejoinsel, but not supported in Postgres < 11
|
||||
CREATE OPERATOR <= (
|
||||
LEFTARG = vector, RIGHTARG = vector, PROCEDURE = vector_le,
|
||||
COMMUTATOR = >= , NEGATOR = > ,
|
||||
RESTRICT = scalarltsel, JOIN = scalarltjoinsel
|
||||
);
|
||||
|
||||
CREATE OPERATOR = (
|
||||
LEFTARG = vector, RIGHTARG = vector, PROCEDURE = vector_eq,
|
||||
COMMUTATOR = = , NEGATOR = <> ,
|
||||
RESTRICT = eqsel, JOIN = eqjoinsel
|
||||
);
|
||||
|
||||
CREATE OPERATOR <> (
|
||||
LEFTARG = vector, RIGHTARG = vector, PROCEDURE = vector_ne,
|
||||
COMMUTATOR = <> , NEGATOR = = ,
|
||||
RESTRICT = eqsel, JOIN = eqjoinsel
|
||||
);
|
||||
|
||||
-- should use scalargesel and scalargejoinsel, but not supported in Postgres < 11
|
||||
CREATE OPERATOR >= (
|
||||
LEFTARG = vector, RIGHTARG = vector, PROCEDURE = vector_ge,
|
||||
COMMUTATOR = <= , NEGATOR = < ,
|
||||
RESTRICT = scalargtsel, JOIN = scalargtjoinsel
|
||||
);
|
||||
|
||||
CREATE OPERATOR > (
|
||||
LEFTARG = vector, RIGHTARG = vector, PROCEDURE = vector_gt,
|
||||
COMMUTATOR = < , NEGATOR = <= ,
|
||||
RESTRICT = scalargtsel, JOIN = scalargtjoinsel
|
||||
);
|
||||
|
||||
-- access method
|
||||
|
||||
CREATE FUNCTION ivfflathandler(internal) RETURNS index_am_handler
|
||||
AS 'MODULE_PATHNAME' LANGUAGE C;
|
||||
|
||||
CREATE ACCESS METHOD ivfflat TYPE INDEX HANDLER ivfflathandler;
|
||||
|
||||
COMMENT ON ACCESS METHOD ivfflat IS 'ivfflat index access method';
|
||||
|
||||
-- opclasses
|
||||
|
||||
CREATE OPERATOR CLASS vector_ops
|
||||
DEFAULT FOR TYPE vector USING btree AS
|
||||
OPERATOR 1 < ,
|
||||
OPERATOR 2 <= ,
|
||||
OPERATOR 3 = ,
|
||||
OPERATOR 4 >= ,
|
||||
OPERATOR 5 > ,
|
||||
FUNCTION 1 vector_cmp(vector, vector);
|
||||
|
||||
CREATE OPERATOR CLASS vector_l2_ops
|
||||
DEFAULT FOR TYPE vector USING ivfflat AS
|
||||
OPERATOR 1 <-> (vector, vector) FOR ORDER BY float_ops,
|
||||
FUNCTION 1 vector_l2_squared_distance(vector, vector),
|
||||
FUNCTION 3 l2_distance(vector, vector);
|
||||
|
||||
CREATE OPERATOR CLASS vector_ip_ops
|
||||
FOR TYPE vector USING ivfflat AS
|
||||
OPERATOR 1 <#> (vector, vector) FOR ORDER BY float_ops,
|
||||
FUNCTION 1 vector_negative_inner_product(vector, vector),
|
||||
FUNCTION 3 vector_spherical_distance(vector, vector),
|
||||
FUNCTION 4 vector_norm(vector);
|
||||
|
||||
CREATE OPERATOR CLASS vector_cosine_ops
|
||||
FOR TYPE vector USING ivfflat AS
|
||||
OPERATOR 1 <=> (vector, vector) FOR ORDER BY float_ops,
|
||||
FUNCTION 1 vector_negative_inner_product(vector, vector),
|
||||
FUNCTION 2 vector_norm(vector),
|
||||
FUNCTION 3 vector_spherical_distance(vector, vector),
|
||||
FUNCTION 4 vector_norm(vector);
|
||||
@@ -1,15 +0,0 @@
|
||||
SET client_min_messages = warning;
|
||||
CREATE EXTENSION IF NOT EXISTS vector;
|
||||
|
||||
SELECT '[1,2,3]'::vector;
|
||||
SELECT '[-1,2,3]'::vector;
|
||||
SELECT '[hello,1]'::vector;
|
||||
SELECT '[NaN,1]'::vector;
|
||||
SELECT '[Infinity,1]'::vector;
|
||||
SELECT '[-Infinity,1]'::vector;
|
||||
SELECT '[1,2,3'::vector;
|
||||
SELECT '[1,2,3]9'::vector;
|
||||
SELECT '1,2,3'::vector;
|
||||
SELECT '[]'::vector;
|
||||
SELECT '[1,]'::vector;
|
||||
SELECT '[1,2,3]'::vector(2);
|
||||
Reference in New Issue
Block a user