Compare commits

...

12 Commits

Author SHA1 Message Date
Andrew Kane
103ac50f1a Version bump to 0.7.4 [skip ci] 2024-08-05 10:44:01 -07:00
Andrew Kane
57fb706242 Fixed locking for parallel HNSW index builds - fixes #635 2024-08-04 11:27:51 -07:00
Andrew Kane
020d3edaa9 Changed warnings to errors for TAP tests [skip ci] 2024-07-27 12:28:03 -07:00
Andrew Kane
1e9e355175 Updated TAP tests to use PostgreSQL::Test packages [skip ci] 2024-07-27 12:24:15 -07:00
Andrew Kane
f1d283f565 Updated comment [skip ci] 2024-07-27 11:36:48 -07:00
Andrew Kane
8684c2ba62 Updated formatting [skip ci] 2024-07-27 08:25:09 -07:00
Andrew Kane
6c692ef23f Fixed compilation error with GCC 14 on i386 when SSE2 is not enabled 2024-07-27 06:20:27 -07:00
Andrew Kane
bb424e96e7 Revert "Simplified makefile"
This reverts commit 30911edb7a.
2024-07-24 20:50:14 -07:00
Andrew Kane
30911edb7a Simplified makefile 2024-07-24 20:39:52 -07:00
Andrew Kane
5ae2bd9efb Improved Windows makefile [skip ci] 2024-07-24 20:37:28 -07:00
Andrew Kane
19215317a4 Fixed installation when make is not run before make install on Windows [skip ci] 2024-07-24 02:09:32 -07:00
Andrew Kane
c7ca7f05de Fixed installation when make is not run before make install - closes #631 2024-07-24 01:30:22 -07:00
51 changed files with 226 additions and 207 deletions

View File

@@ -1,3 +1,8 @@
## 0.7.4 (2024-08-05)
- Fixed locking for parallel HNSW index builds
- Fixed compilation error with GCC 14 on i386 when SSE2 is not enabled
## 0.7.3 (2024-07-22) ## 0.7.3 (2024-07-22)
- Fixed `failed to add index item` error with `sparsevec` - Fixed `failed to add index item` error with `sparsevec`

View File

@@ -2,7 +2,7 @@
"name": "vector", "name": "vector",
"abstract": "Open-source vector similarity search for Postgres", "abstract": "Open-source vector similarity search for Postgres",
"description": "Supports L2 distance, inner product, and cosine distance", "description": "Supports L2 distance, inner product, and cosine distance",
"version": "0.7.3", "version": "0.7.4",
"maintainer": [ "maintainer": [
"Andrew Kane <andrew@ankane.org>" "Andrew Kane <andrew@ankane.org>"
], ],
@@ -20,7 +20,7 @@
"vector": { "vector": {
"file": "sql/vector.sql", "file": "sql/vector.sql",
"docfile": "README.md", "docfile": "README.md",
"version": "0.7.3", "version": "0.7.4",
"abstract": "Open-source vector similarity search for Postgres" "abstract": "Open-source vector similarity search for Postgres"
} }
}, },

View File

@@ -1,8 +1,9 @@
EXTENSION = vector EXTENSION = vector
EXTVERSION = 0.7.3 EXTVERSION = 0.7.4
MODULE_big = vector MODULE_big = vector
DATA = $(wildcard sql/*--*.sql) DATA = $(wildcard sql/*--*--*.sql)
DATA_built = sql/$(EXTENSION)--$(EXTVERSION).sql
OBJS = src/bitutils.o src/bitvec.o src/halfutils.o src/halfvec.o src/hnsw.o src/hnswbuild.o src/hnswinsert.o src/hnswscan.o src/hnswutils.o src/hnswvacuum.o src/ivfbuild.o src/ivfflat.o src/ivfinsert.o src/ivfkmeans.o src/ivfscan.o src/ivfutils.o src/ivfvacuum.o src/sparsevec.o src/vector.o OBJS = src/bitutils.o src/bitvec.o src/halfutils.o src/halfvec.o src/hnsw.o src/hnswbuild.o src/hnswinsert.o src/hnswscan.o src/hnswutils.o src/hnswvacuum.o src/ivfbuild.o src/ivfflat.o src/ivfinsert.o src/ivfkmeans.o src/ivfscan.o src/ivfutils.o src/ivfvacuum.o src/sparsevec.o src/vector.o
HEADERS = src/halfvec.h src/sparsevec.h src/vector.h HEADERS = src/halfvec.h src/sparsevec.h src/vector.h
@@ -42,8 +43,6 @@ all: sql/$(EXTENSION)--$(EXTVERSION).sql
sql/$(EXTENSION)--$(EXTVERSION).sql: sql/$(EXTENSION).sql sql/$(EXTENSION)--$(EXTVERSION).sql: sql/$(EXTENSION).sql
cp $< $@ cp $< $@
EXTRA_CLEAN = sql/$(EXTENSION)--$(EXTVERSION).sql
PG_CONFIG ?= pg_config PG_CONFIG ?= pg_config
PGXS := $(shell $(PG_CONFIG) --pgxs) PGXS := $(shell $(PG_CONFIG) --pgxs)
include $(PGXS) include $(PGXS)
@@ -53,7 +52,7 @@ ifeq ($(PROVE),)
PROVE = prove PROVE = prove
endif endif
# for Postgres 15 # for Postgres < 15
PROVE_FLAGS += -I ./test/perl PROVE_FLAGS += -I ./test/perl
prove_installcheck: prove_installcheck:

View File

@@ -1,6 +1,7 @@
EXTENSION = vector EXTENSION = vector
EXTVERSION = 0.7.3 EXTVERSION = 0.7.4
DATA_built = sql\$(EXTENSION)--$(EXTVERSION).sql
OBJS = src\bitutils.obj src\bitvec.obj src\halfutils.obj src\halfvec.obj src\hnsw.obj src\hnswbuild.obj src\hnswinsert.obj src\hnswscan.obj src\hnswutils.obj src\hnswvacuum.obj src\ivfbuild.obj src\ivfflat.obj src\ivfinsert.obj src\ivfkmeans.obj src\ivfscan.obj src\ivfutils.obj src\ivfvacuum.obj src\sparsevec.obj src\vector.obj OBJS = src\bitutils.obj src\bitvec.obj src\halfutils.obj src\halfvec.obj src\hnsw.obj src\hnswbuild.obj src\hnswinsert.obj src\hnswscan.obj src\hnswutils.obj src\hnswvacuum.obj src\ivfbuild.obj src\ivfflat.obj src\ivfinsert.obj src\ivfkmeans.obj src\ivfscan.obj src\ivfutils.obj src\ivfvacuum.obj src\sparsevec.obj src\vector.obj
HEADERS = src\halfvec.h src\sparsevec.h src\vector.h HEADERS = src\halfvec.h src\sparsevec.h src\vector.h
@@ -19,11 +20,6 @@ PG_CFLAGS = $(PG_CFLAGS) $(OPTFLAGS) /O2 /fp:fast
# https://learn.microsoft.com/en-us/cpp/error-messages/tool-errors/vectorizer-and-parallelizer-messages # https://learn.microsoft.com/en-us/cpp/error-messages/tool-errors/vectorizer-and-parallelizer-messages
# PG_CFLAGS = $(PG_CFLAGS) /Qvec-report:2 # PG_CFLAGS = $(PG_CFLAGS) /Qvec-report:2
all: sql\$(EXTENSION)--$(EXTVERSION).sql
sql\$(EXTENSION)--$(EXTVERSION).sql: sql\$(EXTENSION).sql
copy sql\$(EXTENSION).sql $@
# TODO use pg_config # TODO use pg_config
!ifndef PGROOT !ifndef PGROOT
!error PGROOT is not set !error PGROOT is not set
@@ -43,15 +39,18 @@ SHLIB = $(EXTENSION).dll
LIBS = "$(LIBDIR)\postgres.lib" LIBS = "$(LIBDIR)\postgres.lib"
all: $(SHLIB) $(DATA_built)
.c.obj: .c.obj:
$(CC) $(CFLAGS) /c $< /Fo$@ $(CC) $(CFLAGS) /c $< /Fo$@
$(SHLIB): $(OBJS) $(SHLIB): $(OBJS)
$(CC) $(CFLAGS) $(OBJS) $(LIBS) /link /DLL /OUT:$(SHLIB) $(CC) $(CFLAGS) $(OBJS) $(LIBS) /link /DLL /OUT:$(SHLIB)
all: $(SHLIB) sql\$(EXTENSION)--$(EXTVERSION).sql: sql\$(EXTENSION).sql
copy sql\$(EXTENSION).sql $@
install: install: all
copy $(SHLIB) "$(PKGLIBDIR)" copy $(SHLIB) "$(PKGLIBDIR)"
copy $(EXTENSION).control "$(SHAREDIR)\extension" copy $(EXTENSION).control "$(SHAREDIR)\extension"
copy sql\$(EXTENSION)--*.sql "$(SHAREDIR)\extension" copy sql\$(EXTENSION)--*.sql "$(SHAREDIR)\extension"
@@ -70,6 +69,6 @@ uninstall:
clean: clean:
del /f $(SHLIB) $(EXTENSION).lib $(EXTENSION).exp del /f $(SHLIB) $(EXTENSION).lib $(EXTENSION).exp
del /f $(DATA_built)
del /f $(OBJS) del /f $(OBJS)
del /f sql\$(EXTENSION)--$(EXTVERSION).sql
del /f /s /q results regression.diffs regression.out tmp_check tmp_check_iso log output_iso del /f /s /q results regression.diffs regression.out tmp_check tmp_check_iso log output_iso

View File

@@ -21,7 +21,7 @@ Compile and install the extension (supports Postgres 12+)
```sh ```sh
cd /tmp cd /tmp
git clone --branch v0.7.3 https://github.com/pgvector/pgvector.git git clone --branch v0.7.4 https://github.com/pgvector/pgvector.git
cd pgvector cd pgvector
make make
make install # may need sudo make install # may need sudo
@@ -46,7 +46,7 @@ Then use `nmake` to build:
```cmd ```cmd
set "PGROOT=C:\Program Files\PostgreSQL\16" set "PGROOT=C:\Program Files\PostgreSQL\16"
cd %TEMP% cd %TEMP%
git clone --branch v0.7.3 https://github.com/pgvector/pgvector.git git clone --branch v0.7.4 https://github.com/pgvector/pgvector.git
cd pgvector cd pgvector
nmake /F Makefile.win nmake /F Makefile.win
nmake /F Makefile.win install nmake /F Makefile.win install
@@ -1051,7 +1051,7 @@ This adds pgvector to the [Postgres image](https://hub.docker.com/_/postgres) (r
You can also build the image manually: You can also build the image manually:
```sh ```sh
git clone --branch v0.7.3 https://github.com/pgvector/pgvector.git git clone --branch v0.7.4 https://github.com/pgvector/pgvector.git
cd pgvector cd pgvector
docker build --pull --build-arg PG_MAJOR=16 -t myuser/pgvector . docker build --pull --build-arg PG_MAJOR=16 -t myuser/pgvector .
``` ```

View File

@@ -0,0 +1,2 @@
-- complain if script is sourced in psql, rather than via CREATE EXTENSION
\echo Use "ALTER EXTENSION vector UPDATE TO '0.7.4'" to load this file. \quit

View File

@@ -38,7 +38,7 @@
/* F16C has better performance than _Float16 (on x86-64) */ /* F16C has better performance than _Float16 (on x86-64) */
#if defined(__F16C__) #if defined(__F16C__)
#define F16C_SUPPORT #define F16C_SUPPORT
#elif defined(__FLT16_MAX__) && !defined(HALFVEC_DISPATCH) && !defined(__FreeBSD__) #elif defined(__FLT16_MAX__) && !defined(HALFVEC_DISPATCH) && !defined(__FreeBSD__) && (!defined(__i386__) || defined(__SSE2__))
#define FLT16_SUPPORT #define FLT16_SUPPORT
#endif #endif

View File

@@ -379,7 +379,13 @@ UpdateNeighborsInMemory(char *base, FmgrInfo *procinfo, Oid collation, HnswEleme
for (int lc = e->level; lc >= 0; lc--) for (int lc = e->level; lc >= 0; lc--)
{ {
int lm = HnswGetLayerM(m, lc); int lm = HnswGetLayerM(m, lc);
HnswNeighborArray *neighbors = HnswGetNeighbors(base, e, lc); Size neighborsSize = HNSW_NEIGHBOR_ARRAY_SIZE(lm);
HnswNeighborArray *neighbors = palloc(neighborsSize);
/* Copy neighbors to local memory */
LWLockAcquire(&e->lock, LW_SHARED);
memcpy(neighbors, HnswGetNeighbors(base, e, lc), neighborsSize);
LWLockRelease(&e->lock);
for (int i = 0; i < neighbors->length; i++) for (int i = 0; i < neighbors->length; i++)
{ {
@@ -389,7 +395,6 @@ UpdateNeighborsInMemory(char *base, FmgrInfo *procinfo, Oid collation, HnswEleme
/* Keep scan-build happy on Mac x86-64 */ /* Keep scan-build happy on Mac x86-64 */
Assert(neighborElement); Assert(neighborElement);
/* Use element for lock instead of hc since hc can be replaced */
LWLockAcquire(&neighborElement->lock, LW_EXCLUSIVE); LWLockAcquire(&neighborElement->lock, LW_EXCLUSIVE);
HnswUpdateConnection(base, e, hc, lm, lc, NULL, NULL, procinfo, collation); HnswUpdateConnection(base, e, hc, lm, lc, NULL, NULL, procinfo, collation);
LWLockRelease(&neighborElement->lock); LWLockRelease(&neighborElement->lock);

View File

@@ -0,0 +1,11 @@
package PostgreSQL::Test::Cluster;
use PostgresNode;
sub new
{
my ($class, $name) = @_;
return get_new_node($name);
}
1;

View File

@@ -0,0 +1,5 @@
package PostgreSQL::Test::Utils;
use TestLib;
1;

View File

@@ -1,8 +0,0 @@
use PostgreSQL::Test::Cluster;
sub get_new_node
{
return PostgreSQL::Test::Cluster->new(@_);
}
1;

View File

@@ -1,3 +0,0 @@
use PostgreSQL::Test::Utils;
1;

View File

@@ -2,9 +2,9 @@
# Test generic xlog record work for ivfflat index replication. # Test generic xlog record work for ivfflat index replication.
use strict; use strict;
use warnings; use warnings FATAL => 'all';
use PostgresNode; use PostgreSQL::Test::Cluster;
use TestLib; use PostgreSQL::Test::Utils;
use Test::More; use Test::More;
my $dim = 32; my $dim = 32;
@@ -49,7 +49,7 @@ sub test_index_replay
my $array_sql = join(",", ('random()') x $dim); my $array_sql = join(",", ('random()') x $dim);
# Initialize primary node # Initialize primary node
$node_primary = get_new_node('primary'); $node_primary = PostgreSQL::Test::Cluster->new('primary');
$node_primary->init(allows_streaming => 1); $node_primary->init(allows_streaming => 1);
if ($dim > 32) if ($dim > 32)
{ {
@@ -67,7 +67,7 @@ my $backup_name = 'my_backup';
$node_primary->backup($backup_name); $node_primary->backup($backup_name);
# Create streaming replica linking to primary # Create streaming replica linking to primary
$node_replica = get_new_node('replica'); $node_replica = PostgreSQL::Test::Cluster->new('replica');
$node_replica->init_from_backup($node_primary, $backup_name, has_streaming => 1); $node_replica->init_from_backup($node_primary, $backup_name, has_streaming => 1);
$node_replica->start; $node_replica->start;

View File

@@ -1,7 +1,7 @@
use strict; use strict;
use warnings; use warnings FATAL => 'all';
use PostgresNode; use PostgreSQL::Test::Cluster;
use TestLib; use PostgreSQL::Test::Utils;
use Test::More; use Test::More;
my $dim = 3; my $dim = 3;
@@ -15,7 +15,7 @@ for (1 .. $dim)
my $array_sql = join(", ", @r); my $array_sql = join(", ", @r);
# Initialize node # Initialize node
my $node = get_new_node('node'); my $node = PostgreSQL::Test::Cluster->new('node');
$node->init; $node->init;
$node->start; $node->start;

View File

@@ -1,7 +1,7 @@
use strict; use strict;
use warnings; use warnings FATAL => 'all';
use PostgresNode; use PostgreSQL::Test::Cluster;
use TestLib; use PostgreSQL::Test::Utils;
use Test::More; use Test::More;
my $node; my $node;
@@ -49,7 +49,7 @@ sub test_recall
} }
# Initialize node # Initialize node
$node = get_new_node('node'); $node = PostgreSQL::Test::Cluster->new('node');
$node->init; $node->init;
$node->start; $node->start;

View File

@@ -1,7 +1,7 @@
use strict; use strict;
use warnings; use warnings FATAL => 'all';
use PostgresNode; use PostgreSQL::Test::Cluster;
use TestLib; use PostgreSQL::Test::Utils;
use Test::More; use Test::More;
my $node; my $node;
@@ -48,7 +48,7 @@ sub test_recall
} }
# Initialize node # Initialize node
$node = get_new_node('node'); $node = PostgreSQL::Test::Cluster->new('node');
$node->init; $node->init;
$node->start; $node->start;

View File

@@ -1,11 +1,11 @@
use strict; use strict;
use warnings; use warnings FATAL => 'all';
use PostgresNode; use PostgreSQL::Test::Cluster;
use TestLib; use PostgreSQL::Test::Utils;
use Test::More; use Test::More;
# Initialize node # Initialize node
my $node = get_new_node('node'); my $node = PostgreSQL::Test::Cluster->new('node');
$node->init; $node->init;
$node->start; $node->start;

View File

@@ -1,11 +1,11 @@
use strict; use strict;
use warnings; use warnings FATAL => 'all';
use PostgresNode; use PostgreSQL::Test::Cluster;
use TestLib; use PostgreSQL::Test::Utils;
use Test::More; use Test::More;
# Initialize node # Initialize node
my $node = get_new_node('node'); my $node = PostgreSQL::Test::Cluster->new('node');
$node->init; $node->init;
$node->start; $node->start;

View File

@@ -1,7 +1,7 @@
use strict; use strict;
use warnings; use warnings FATAL => 'all';
use PostgresNode; use PostgreSQL::Test::Cluster;
use TestLib; use PostgreSQL::Test::Utils;
use Test::More; use Test::More;
my $dim = 768; my $dim = 768;
@@ -9,7 +9,7 @@ my $dim = 768;
my $array_sql = join(",", ('random()') x $dim); my $array_sql = join(",", ('random()') x $dim);
# Initialize node # Initialize node
my $node = get_new_node('node'); my $node = PostgreSQL::Test::Cluster->new('node');
$node->init; $node->init;
$node->start; $node->start;

View File

@@ -1,11 +1,11 @@
use strict; use strict;
use warnings; use warnings FATAL => 'all';
use PostgresNode; use PostgreSQL::Test::Cluster;
use TestLib; use PostgreSQL::Test::Utils;
use Test::More; use Test::More;
# Initialize node # Initialize node
my $node = get_new_node('node'); my $node = PostgreSQL::Test::Cluster->new('node');
$node->init; $node->init;
$node->start; $node->start;

View File

@@ -1,7 +1,7 @@
use strict; use strict;
use warnings; use warnings FATAL => 'all';
use PostgresNode; use PostgreSQL::Test::Cluster;
use TestLib; use PostgreSQL::Test::Utils;
use Test::More; use Test::More;
my $dim = 3; my $dim = 3;
@@ -11,7 +11,7 @@ my $limit = 20;
my $array_sql = join(",", ('random()') x $dim); my $array_sql = join(",", ('random()') x $dim);
# Initialize node # Initialize node
my $node = get_new_node('node'); my $node = PostgreSQL::Test::Cluster->new('node');
$node->init; $node->init;
$node->start; $node->start;

View File

@@ -2,9 +2,9 @@
# Test generic xlog record work for hnsw index replication. # Test generic xlog record work for hnsw index replication.
use strict; use strict;
use warnings; use warnings FATAL => 'all';
use PostgresNode; use PostgreSQL::Test::Cluster;
use TestLib; use PostgreSQL::Test::Utils;
use Test::More; use Test::More;
my $dim = 32; my $dim = 32;
@@ -49,7 +49,7 @@ sub test_index_replay
my $array_sql = join(",", ('random()') x $dim); my $array_sql = join(",", ('random()') x $dim);
# Initialize primary node # Initialize primary node
$node_primary = get_new_node('primary'); $node_primary = PostgreSQL::Test::Cluster->new('primary');
$node_primary->init(allows_streaming => 1); $node_primary->init(allows_streaming => 1);
if ($dim > 32) if ($dim > 32)
{ {
@@ -67,7 +67,7 @@ my $backup_name = 'my_backup';
$node_primary->backup($backup_name); $node_primary->backup($backup_name);
# Create streaming replica linking to primary # Create streaming replica linking to primary
$node_replica = get_new_node('replica'); $node_replica = PostgreSQL::Test::Cluster->new('replica');
$node_replica->init_from_backup($node_primary, $backup_name, has_streaming => 1); $node_replica->init_from_backup($node_primary, $backup_name, has_streaming => 1);
$node_replica->start; $node_replica->start;

View File

@@ -1,7 +1,7 @@
use strict; use strict;
use warnings; use warnings FATAL => 'all';
use PostgresNode; use PostgreSQL::Test::Cluster;
use TestLib; use PostgreSQL::Test::Utils;
use Test::More; use Test::More;
my $dim = 3; my $dim = 3;
@@ -15,7 +15,7 @@ for (1 .. $dim)
my $array_sql = join(", ", @r); my $array_sql = join(", ", @r);
# Initialize node # Initialize node
my $node = get_new_node('node'); my $node = PostgreSQL::Test::Cluster->new('node');
$node->init; $node->init;
$node->start; $node->start;

View File

@@ -1,7 +1,7 @@
use strict; use strict;
use warnings; use warnings FATAL => 'all';
use PostgresNode; use PostgreSQL::Test::Cluster;
use TestLib; use PostgreSQL::Test::Utils;
use Test::More; use Test::More;
my $node; my $node;
@@ -47,7 +47,7 @@ sub test_recall
} }
# Initialize node # Initialize node
$node = get_new_node('node'); $node = PostgreSQL::Test::Cluster->new('node');
$node->init; $node->init;
$node->start; $node->start;

View File

@@ -1,7 +1,7 @@
use strict; use strict;
use warnings; use warnings FATAL => 'all';
use PostgresNode; use PostgreSQL::Test::Cluster;
use TestLib; use PostgreSQL::Test::Utils;
use Test::More; use Test::More;
my $node; my $node;
@@ -47,7 +47,7 @@ sub test_recall
} }
# Initialize node # Initialize node
$node = get_new_node('node'); $node = PostgreSQL::Test::Cluster->new('node');
$node->init; $node->init;
$node->start; $node->start;

View File

@@ -1,7 +1,7 @@
use strict; use strict;
use warnings; use warnings FATAL => 'all';
use PostgresNode; use PostgreSQL::Test::Cluster;
use TestLib; use PostgreSQL::Test::Utils;
use Test::More; use Test::More;
my $node; my $node;
@@ -48,7 +48,7 @@ sub test_recall
} }
# Initialize node # Initialize node
$node = get_new_node('node'); $node = PostgreSQL::Test::Cluster->new('node');
$node->init; $node->init;
$node->start; $node->start;

View File

@@ -1,11 +1,11 @@
use strict; use strict;
use warnings; use warnings FATAL => 'all';
use PostgresNode; use PostgreSQL::Test::Cluster;
use TestLib; use PostgreSQL::Test::Utils;
use Test::More; use Test::More;
# Initialize node # Initialize node
my $node = get_new_node('node'); my $node = PostgreSQL::Test::Cluster->new('node');
$node->init; $node->init;
$node->start; $node->start;

View File

@@ -1,7 +1,7 @@
use strict; use strict;
use warnings; use warnings FATAL => 'all';
use PostgresNode; use PostgreSQL::Test::Cluster;
use TestLib; use PostgreSQL::Test::Utils;
use Test::More; use Test::More;
# Ensures elements and neighbors on both same and different pages # Ensures elements and neighbors on both same and different pages
@@ -10,7 +10,7 @@ my $dim = 1900;
my $array_sql = join(",", ('random()') x $dim); my $array_sql = join(",", ('random()') x $dim);
# Initialize node # Initialize node
my $node = get_new_node('node'); my $node = PostgreSQL::Test::Cluster->new('node');
$node->init; $node->init;
$node->start; $node->start;

View File

@@ -1,7 +1,7 @@
use strict; use strict;
use warnings; use warnings FATAL => 'all';
use PostgresNode; use PostgreSQL::Test::Cluster;
use TestLib; use PostgreSQL::Test::Utils;
use Test::More; use Test::More;
my $dim = 3; my $dim = 3;
@@ -11,7 +11,7 @@ my $limit = 20;
my $array_sql = join(",", ('random()') x $dim); my $array_sql = join(",", ('random()') x $dim);
# Initialize node # Initialize node
my $node = get_new_node('node'); my $node = PostgreSQL::Test::Cluster->new('node');
$node->init; $node->init;
$node->start; $node->start;

View File

@@ -1,11 +1,11 @@
use strict; use strict;
use warnings; use warnings FATAL => 'all';
use PostgresNode; use PostgreSQL::Test::Cluster;
use TestLib; use PostgreSQL::Test::Utils;
use Test::More; use Test::More;
# Initialize node # Initialize node
my $node = get_new_node('node'); my $node = PostgreSQL::Test::Cluster->new('node');
$node->init; $node->init;
$node->start; $node->start;
@@ -53,7 +53,7 @@ sub test_aggregate
else else
{ {
# Does not raise overflow error in this instance due to loss of precision # Does not raise overflow error in this instance due to loss of precision
is($res, "[24576,24576,49152]") is($res, "[24576,24576,49152]");
} }
} }

View File

@@ -1,13 +1,13 @@
use strict; use strict;
use warnings; use warnings FATAL => 'all';
use PostgresNode; use PostgreSQL::Test::Cluster;
use TestLib; use PostgreSQL::Test::Utils;
use Test::More; use Test::More;
my $dim = 1024; my $dim = 1024;
# Initialize node # Initialize node
my $node = get_new_node('node'); my $node = PostgreSQL::Test::Cluster->new('node');
$node->init; $node->init;
$node->start; $node->start;

View File

@@ -1,7 +1,7 @@
use strict; use strict;
use warnings; use warnings FATAL => 'all';
use PostgresNode; use PostgreSQL::Test::Cluster;
use TestLib; use PostgreSQL::Test::Utils;
use Test::More; use Test::More;
my $node; my $node;
@@ -51,7 +51,7 @@ sub test_recall
} }
# Initialize node # Initialize node
$node = get_new_node('node'); $node = PostgreSQL::Test::Cluster->new('node');
$node->init; $node->init;
$node->start; $node->start;

View File

@@ -1,7 +1,7 @@
use strict; use strict;
use warnings; use warnings FATAL => 'all';
use PostgresNode; use PostgreSQL::Test::Cluster;
use TestLib; use PostgreSQL::Test::Utils;
use Test::More; use Test::More;
my $node; my $node;
@@ -51,7 +51,7 @@ sub test_recall
} }
# Initialize node # Initialize node
$node = get_new_node('node'); $node = PostgreSQL::Test::Cluster->new('node');
$node->init; $node->init;
$node->start; $node->start;

View File

@@ -1,7 +1,7 @@
use strict; use strict;
use warnings; use warnings FATAL => 'all';
use PostgresNode; use PostgreSQL::Test::Cluster;
use TestLib; use PostgreSQL::Test::Utils;
use Test::More; use Test::More;
my $node; my $node;
@@ -51,7 +51,7 @@ sub test_recall
} }
# Initialize node # Initialize node
$node = get_new_node('node'); $node = PostgreSQL::Test::Cluster->new('node');
$node->init; $node->init;
$node->start; $node->start;

View File

@@ -1,11 +1,11 @@
use strict; use strict;
use warnings; use warnings FATAL => 'all';
use PostgresNode; use PostgreSQL::Test::Cluster;
use TestLib; use PostgreSQL::Test::Utils;
use Test::More; use Test::More;
# Initialize node # Initialize node
my $node = get_new_node('node'); my $node = PostgreSQL::Test::Cluster->new('node');
$node->init; $node->init;
$node->start; $node->start;

View File

@@ -1,7 +1,7 @@
use strict; use strict;
use warnings; use warnings FATAL => 'all';
use PostgresNode; use PostgreSQL::Test::Cluster;
use TestLib; use PostgreSQL::Test::Utils;
use Test::More; use Test::More;
my $node; my $node;
@@ -48,7 +48,7 @@ sub test_recall
} }
# Initialize node # Initialize node
$node = get_new_node('node'); $node = PostgreSQL::Test::Cluster->new('node');
$node->init; $node->init;
$node->start; $node->start;

View File

@@ -1,7 +1,7 @@
use strict; use strict;
use warnings; use warnings FATAL => 'all';
use PostgresNode; use PostgreSQL::Test::Cluster;
use TestLib; use PostgreSQL::Test::Utils;
use Test::More; use Test::More;
my $node; my $node;
@@ -48,7 +48,7 @@ sub test_recall
} }
# Initialize node # Initialize node
$node = get_new_node('node'); $node = PostgreSQL::Test::Cluster->new('node');
$node->init; $node->init;
$node->start; $node->start;

View File

@@ -1,7 +1,7 @@
use strict; use strict;
use warnings; use warnings FATAL => 'all';
use PostgresNode; use PostgreSQL::Test::Cluster;
use TestLib; use PostgreSQL::Test::Utils;
use Test::More; use Test::More;
my $node; my $node;
@@ -48,7 +48,7 @@ sub test_recall
} }
# Initialize node # Initialize node
$node = get_new_node('node'); $node = PostgreSQL::Test::Cluster->new('node');
$node->init; $node->init;
$node->start; $node->start;

View File

@@ -1,11 +1,11 @@
use strict; use strict;
use warnings; use warnings FATAL => 'all';
use PostgresNode; use PostgreSQL::Test::Cluster;
use TestLib; use PostgreSQL::Test::Utils;
use Test::More; use Test::More;
# Initialize node # Initialize node
my $node = get_new_node('node'); my $node = PostgreSQL::Test::Cluster->new('node');
$node->init; $node->init;
$node->start; $node->start;

View File

@@ -1,7 +1,7 @@
use strict; use strict;
use warnings; use warnings FATAL => 'all';
use PostgresNode; use PostgreSQL::Test::Cluster;
use TestLib; use PostgreSQL::Test::Utils;
use Test::More; use Test::More;
my $node; my $node;
@@ -47,7 +47,7 @@ sub test_recall
} }
# Initialize node # Initialize node
$node = get_new_node('node'); $node = PostgreSQL::Test::Cluster->new('node');
$node->init; $node->init;
$node->start; $node->start;

View File

@@ -1,7 +1,7 @@
use strict; use strict;
use warnings; use warnings FATAL => 'all';
use PostgresNode; use PostgreSQL::Test::Cluster;
use TestLib; use PostgreSQL::Test::Utils;
use Test::More; use Test::More;
my $node; my $node;
@@ -47,7 +47,7 @@ sub test_recall
} }
# Initialize node # Initialize node
$node = get_new_node('node'); $node = PostgreSQL::Test::Cluster->new('node');
$node->init; $node->init;
$node->start; $node->start;

View File

@@ -1,7 +1,7 @@
use strict; use strict;
use warnings; use warnings FATAL => 'all';
use PostgresNode; use PostgreSQL::Test::Cluster;
use TestLib; use PostgreSQL::Test::Utils;
use Test::More; use Test::More;
my $node; my $node;
@@ -48,7 +48,7 @@ sub test_recall
} }
# Initialize node # Initialize node
$node = get_new_node('node'); $node = PostgreSQL::Test::Cluster->new('node');
$node->init; $node->init;
$node->start; $node->start;

View File

@@ -1,11 +1,11 @@
use strict; use strict;
use warnings; use warnings FATAL => 'all';
use PostgresNode; use PostgreSQL::Test::Cluster;
use TestLib; use PostgreSQL::Test::Utils;
use Test::More; use Test::More;
# Initialize node # Initialize node
my $node = get_new_node('node'); my $node = PostgreSQL::Test::Cluster->new('node');
$node->init; $node->init;
$node->start; $node->start;

View File

@@ -1,7 +1,7 @@
use strict; use strict;
use warnings; use warnings FATAL => 'all';
use PostgresNode; use PostgreSQL::Test::Cluster;
use TestLib; use PostgreSQL::Test::Utils;
use Test::More; use Test::More;
my $node; my $node;
@@ -51,7 +51,7 @@ sub test_recall
} }
# Initialize node # Initialize node
$node = get_new_node('node'); $node = PostgreSQL::Test::Cluster->new('node');
$node->init; $node->init;
$node->start; $node->start;

View File

@@ -1,14 +1,14 @@
use strict; use strict;
use warnings; use warnings FATAL => 'all';
use PostgresNode; use PostgreSQL::Test::Cluster;
use TestLib; use PostgreSQL::Test::Utils;
use Test::More; use Test::More;
my $node; my $node;
my $array_sql = join(",", ('floor(random() * 2)::int - 1') x 3); my $array_sql = join(",", ('floor(random() * 2)::int - 1') x 3);
# Initialize node # Initialize node
$node = get_new_node('node'); $node = PostgreSQL::Test::Cluster->new('node');
$node->init; $node->init;
$node->start; $node->start;

View File

@@ -1,7 +1,7 @@
use strict; use strict;
use warnings; use warnings FATAL => 'all';
use PostgresNode; use PostgreSQL::Test::Cluster;
use TestLib; use PostgreSQL::Test::Utils;
use Test::More; use Test::More;
my $node; my $node;
@@ -10,7 +10,7 @@ my $dim = 5;
my $array_sql = join(",", ('floor(random() * 4)::int - 2') x $dim); my $array_sql = join(",", ('floor(random() * 4)::int - 2') x $dim);
# Initialize node # Initialize node
$node = get_new_node('node'); $node = PostgreSQL::Test::Cluster->new('node');
$node->init; $node->init;
$node->start; $node->start;

View File

@@ -1,7 +1,7 @@
use strict; use strict;
use warnings; use warnings FATAL => 'all';
use PostgresNode; use PostgreSQL::Test::Cluster;
use TestLib; use PostgreSQL::Test::Utils;
use Test::More; use Test::More;
my $node; my $node;
@@ -51,7 +51,7 @@ sub test_recall
} }
# Initialize node # Initialize node
$node = get_new_node('node'); $node = PostgreSQL::Test::Cluster->new('node');
$node->init; $node->init;
$node->start; $node->start;

View File

@@ -1,11 +1,11 @@
use strict; use strict;
use warnings; use warnings FATAL => 'all';
use PostgresNode; use PostgreSQL::Test::Cluster;
use TestLib; use PostgreSQL::Test::Utils;
use Test::More; use Test::More;
# Initialize node # Initialize node
my $node = get_new_node('node'); my $node = PostgreSQL::Test::Cluster->new('node');
$node->init; $node->init;
$node->start; $node->start;

View File

@@ -1,11 +1,11 @@
use strict; use strict;
use warnings; use warnings FATAL => 'all';
use PostgresNode; use PostgreSQL::Test::Cluster;
use TestLib; use PostgreSQL::Test::Utils;
use Test::More; use Test::More;
# Initialize node # Initialize node
my $node = get_new_node('node'); my $node = PostgreSQL::Test::Cluster->new('node');
$node->init; $node->init;
$node->start; $node->start;

View File

@@ -1,11 +1,11 @@
use strict; use strict;
use warnings; use warnings FATAL => 'all';
use PostgresNode; use PostgreSQL::Test::Cluster;
use TestLib; use PostgreSQL::Test::Utils;
use Test::More; use Test::More;
# Initialize node # Initialize node
my $node = get_new_node('node'); my $node = PostgreSQL::Test::Cluster->new('node');
$node->init; $node->init;
$node->start; $node->start;
@@ -14,13 +14,17 @@ $node->safe_psql("postgres", "CREATE EXTENSION vector;");
$node->safe_psql("postgres", "CREATE TABLE tst (i serial, v sparsevec(100000));"); $node->safe_psql("postgres", "CREATE TABLE tst (i serial, v sparsevec(100000));");
$node->safe_psql("postgres", "CREATE INDEX ON tst USING hnsw (v sparsevec_l2_ops);"); $node->safe_psql("postgres", "CREATE INDEX ON tst USING hnsw (v sparsevec_l2_ops);");
for (1 .. 3) { for (1 .. 3)
for (1 .. 100) { {
for (1 .. 100)
{
my @elements; my @elements;
my %indices; my %indices;
for (1 .. int(rand() * 100)) { for (1 .. int(rand() * 100))
{
my $index = int(rand() * (100000 - 1)) + 1; my $index = int(rand() * (100000 - 1)) + 1;
if (!exists($indices{$index})) { if (!exists($indices{$index}))
{
my $value = rand(); my $value = rand();
push(@elements, "$index:$value"); push(@elements, "$index:$value");
$indices{$index} = 1; $indices{$index} = 1;

View File

@@ -1,4 +1,4 @@
comment = 'vector data type and ivfflat and hnsw access methods' comment = 'vector data type and ivfflat and hnsw access methods'
default_version = '0.7.3' default_version = '0.7.4'
module_pathname = '$libdir/vector' module_pathname = '$libdir/vector'
relocatable = true relocatable = true