From 0fe43ca675dac871df228f9b3c08a6fa0c619e64 Mon Sep 17 00:00:00 2001 From: Andrew Kane Date: Sun, 3 Sep 2023 15:15:02 -0700 Subject: [PATCH] Added test for marking tuples as dead --- test/t/018_ivfflat_deletes.pl | 43 +++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 test/t/018_ivfflat_deletes.pl diff --git a/test/t/018_ivfflat_deletes.pl b/test/t/018_ivfflat_deletes.pl new file mode 100644 index 0000000..94f5e1b --- /dev/null +++ b/test/t/018_ivfflat_deletes.pl @@ -0,0 +1,43 @@ +use strict; +use warnings; +use PostgresNode; +use TestLib; +use Test::More; + +my $dim = 3; + +my $array_sql = join(",", ('random()') x $dim); + +# Initialize node +my $node = get_new_node('node'); +$node->init; +$node->start; + +# Create table and index +$node->safe_psql("postgres", "CREATE EXTENSION vector;"); +$node->safe_psql("postgres", "CREATE TABLE tst (i serial, v vector($dim));"); +$node->safe_psql("postgres", + "INSERT INTO tst (v) SELECT ARRAY[$array_sql] FROM generate_series(1, 10000) i;" +); +$node->safe_psql("postgres", "CREATE INDEX ON tst USING ivfflat (v vector_l2_ops);"); + +# Delete data +$node->safe_psql("postgres", "DELETE FROM tst WHERE i % 10 != 1;"); + +my $exp = $node->safe_psql("postgres", qq( + SET enable_indexscan = off; + SELECT i FROM tst ORDER BY v <-> (SELECT v FROM tst WHERE i = 1); +)); + +# Run twice to make sure correct tuples marked as dead +for (1 .. 2) +{ + my $res = $node->safe_psql("postgres", qq( + SET enable_seqscan = off; + SET ivfflat.probes = 100; + SELECT i FROM tst ORDER BY v <-> (SELECT v FROM tst WHERE i = 1); + )); + is($res, $exp); +} + +done_testing();