-- Init script for PostgreSQL + pgvector (local AlloyDB AI simulation) -- Run on container start: docker-compose -f docker-compose.chroma.yml up -d postgres-pgvector -- Enable pgvector extension CREATE EXTENSION IF NOT EXISTS vector; -- Create memories table with vector support CREATE TABLE IF NOT EXISTS memories ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), agent_id VARCHAR(255) NOT NULL DEFAULT 'openclaw-serpent', content TEXT NOT NULL, embedding VECTOR(1536), metadata JSONB DEFAULT '{}', tags TEXT[] DEFAULT '{}', source VARCHAR(50) DEFAULT 'alloydb', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -- Create indexes for performance CREATE INDEX IF NOT EXISTS idx_memories_embedding ON memories USING ivfflat (embedding vector_cosine_ops); CREATE INDEX IF NOT EXISTS idx_memories_tags ON memories USING GIN(tags); CREATE INDEX IF NOT EXISTS idx_memories_agent ON memories(agent_id); CREATE INDEX IF NOT EXISTS idx_memories_created ON memories(created_at DESC); -- Create function for auto-updating updated_at CREATE OR REPLACE FUNCTION update_updated_at_column() RETURNS TRIGGER AS $$ BEGIN NEW.updated_at = CURRENT_TIMESTAMP; RETURN NEW; END; $$ language 'plpgsql'; -- Create trigger DROP TRIGGER IF EXISTS update_memories_updated_at ON memories; CREATE TRIGGER update_memories_updated_at BEFORE UPDATE ON memories FOR EACH ROW EXECUTE FUNCTION update_updated_at_column(); -- Insert test data (optional) -- INSERT INTO memories (content, tags) VALUES -- ('Hero section uses GSAP fade-up with 1.2s duration', ARRAY['motion', 'design']), -- ('Switched to Space Grotesk font', ARRAY['typography', 'design']); -- Verify setup SELECT 'pgvector initialized successfully' as status; SELECT COUNT(*) as total_memories FROM memories;