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 ); 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(1536), created_at TIMESTAMPTZ NOT NULL DEFAULT now(), UNIQUE(chunk_id, model) );