43 lines
1.3 KiB
SQL
43 lines
1.3 KiB
SQL
CREATE TABLE IF NOT EXISTS namespaces (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
name TEXT UNIQUE NOT NULL
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS memory_items (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
namespace_id UUID NOT NULL REFERENCES namespaces(id) ON DELETE CASCADE,
|
|
key TEXT,
|
|
content TEXT NOT NULL,
|
|
metadata JSONB NOT NULL DEFAULT '{}',
|
|
tags TEXT[] NOT NULL DEFAULT '{}',
|
|
revision INT NOT NULL DEFAULT 1,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
expires_at TIMESTAMPTZ,
|
|
deleted_at TIMESTAMPTZ,
|
|
last_accessed_at TIMESTAMPTZ
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS memory_chunks (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
item_id UUID NOT NULL REFERENCES memory_items(id) ON DELETE CASCADE,
|
|
seq INT NOT NULL,
|
|
content TEXT NOT NULL,
|
|
expires_at TIMESTAMPTZ,
|
|
deleted_at TIMESTAMPTZ,
|
|
content_tsv tsvector GENERATED ALWAYS AS (to_tsvector('english', content)) STORED
|
|
);
|
|
|
|
-- Ensure single row per (item,seq)
|
|
CREATE UNIQUE INDEX IF NOT EXISTS ux_chunks_item_seq ON memory_chunks(item_id, seq);
|
|
|
|
CREATE TABLE IF NOT EXISTS embeddings (
|
|
id BIGSERIAL PRIMARY KEY,
|
|
chunk_id UUID NOT NULL REFERENCES memory_chunks(id) ON DELETE CASCADE,
|
|
model TEXT NOT NULL,
|
|
dim INT NOT NULL,
|
|
vector VECTOR(1024),
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
UNIQUE(chunk_id, model)
|
|
);
|