summaryrefslogtreecommitdiff
path: root/pkgs/servers/sql/postgresql/ext/pgvectorscale/package.nix
blob: fc98f7746178b9c0513a9973cb62694875cd118c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
{
  buildPgrxExtension,
  cargo-pgrx_0_16_1,
  postgresql,
  fetchFromGitHub,
  lib,
  postgresqlTestExtension,
}:

buildPgrxExtension (finalAttrs: {
  pname = "pgvectorscale";
  version = "0.9.0";

  src = fetchFromGitHub {
    owner = "timescale";
    repo = "pgvectorscale";
    tag = finalAttrs.version;
    hash = "sha256-whGTJI73wifYkleC+aAbDV4nhwls3uFs1xKcB0zLDRo=";
  };

  doCheck = false;

  cargoHash = "sha256-uaRKUtsUdZPcrQLAixCiEphXQqdsRhi8nSfh9b3w0ao=";
  cargoPatches = [
    ./add-Cargo.lock.patch
  ];

  cargoPgrxFlags = [
    "-p"
    "vectorscale"
  ];

  inherit postgresql;
  cargo-pgrx = cargo-pgrx_0_16_1;

  passthru.tests.extension = postgresqlTestExtension {
    inherit (finalAttrs) finalPackage;
    withPackages = [ "pgvector" ];
    sql = ''
      CREATE EXTENSION vectorscale CASCADE;
      CREATE TABLE document_embedding  (
          id BIGINT PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY,
          embedding VECTOR(3)
      );

      INSERT INTO document_embedding (id, embedding) VALUES
      (10, '[1,2,4]'),
      (20, '[1,2,5]');

      CREATE INDEX document_embedding_idx ON document_embedding
      USING diskann (embedding vector_cosine_ops);
    '';
    asserts = [
      {
        query = "SELECT id FROM document_embedding WHERE embedding <-> '[1,2,3]' = 1";
        expected = "10";
        description = "Expected vector of row with ID=10 to have an euclidean distance from [1,2,3] of 1.";
      }
      {
        query = "SELECT id FROM document_embedding WHERE embedding <-> '[1,2,3]' = 2";
        expected = "20";
        description = "Expected vector of row with ID=20 to have an euclidean distance from [1,2,3] of 2.";
      }
    ];
  };

  meta = {
    # Upstream removed support for PostgreSQL 13 on 0.9.0: https://github.com/timescale/pgvectorscale/releases/tag/0.9.0
    broken = lib.versionOlder postgresql.version "14";
    homepage = "https://github.com/timescale/pgvectorscale";
    maintainers = [
      lib.maintainers.leona
      lib.maintainers.osnyx
    ];
    description = "Complement to pgvector for high performance, cost efficient vector search on large workloads";
    license = lib.licenses.postgresql;
    platforms = postgresql.meta.platforms;
    changelog = "https://github.com/timescale/pgvectorscale/releases/tag/${finalAttrs.version}";
  };
})