pgvector_schema.sql
2.28 KB
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
CREATE EXTENSION IF NOT EXISTS vector;
CREATE TABLE IF NOT EXISTS songs (
song_id TEXT PRIMARY KEY,
title TEXT,
artist TEXT,
version_id TEXT,
source_dataset TEXT,
license TEXT,
created_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE TABLE IF NOT EXISTS references (
reference_id BIGSERIAL PRIMARY KEY,
song_id TEXT NOT NULL REFERENCES songs(song_id) ON DELETE CASCADE,
audio_uri TEXT NOT NULL,
duration_sec DOUBLE PRECISION NOT NULL,
sample_rate INTEGER DEFAULT 16000,
created_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE TABLE IF NOT EXISTS segments (
segment_id BIGSERIAL PRIMARY KEY,
song_id TEXT NOT NULL REFERENCES songs(song_id) ON DELETE CASCADE,
audio_uri TEXT NOT NULL,
offset_sec DOUBLE PRECISION DEFAULT 0,
duration_sec DOUBLE PRECISION NOT NULL,
split TEXT,
type TEXT NOT NULL,
segment_type TEXT,
source_dataset TEXT,
created_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE TABLE IF NOT EXISTS reference_embeddings (
embedding_id BIGSERIAL PRIMARY KEY,
reference_id BIGINT NOT NULL REFERENCES references(reference_id) ON DELETE CASCADE,
song_id TEXT NOT NULL REFERENCES songs(song_id) ON DELETE CASCADE,
embedding vector(192) NOT NULL,
model_version TEXT NOT NULL,
data_version TEXT,
created_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE TABLE IF NOT EXISTS query_embeddings (
embedding_id BIGSERIAL PRIMARY KEY,
segment_id BIGINT NOT NULL REFERENCES segments(segment_id) ON DELETE CASCADE,
song_id TEXT NOT NULL REFERENCES songs(song_id) ON DELETE CASCADE,
embedding vector(192) NOT NULL,
model_version TEXT NOT NULL,
data_version TEXT,
created_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE INDEX IF NOT EXISTS idx_segments_song_id ON segments(song_id);
CREATE INDEX IF NOT EXISTS idx_references_song_id ON references(song_id);
CREATE INDEX IF NOT EXISTS idx_reference_embeddings_song_id ON reference_embeddings(song_id);
CREATE INDEX IF NOT EXISTS idx_query_embeddings_song_id ON query_embeddings(song_id);
CREATE INDEX IF NOT EXISTS idx_reference_embeddings_vector_cosine
ON reference_embeddings USING ivfflat (embedding vector_cosine_ops)
WITH (lists = 100);
CREATE INDEX IF NOT EXISTS idx_query_embeddings_vector_cosine
ON query_embeddings USING ivfflat (embedding vector_cosine_ops)
WITH (lists = 100);