LocalCloud includes PostgreSQL, the world’s most advanced open-source relational database, with optional pgvector extension for vector similarity search.
-- User managementCREATE TABLE users ( id SERIAL PRIMARY KEY, email VARCHAR(255) UNIQUE NOT NULL, name VARCHAR(100) NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP);-- Application dataCREATE TABLE posts ( id SERIAL PRIMARY KEY, user_id INTEGER REFERENCES users(id), title VARCHAR(255) NOT NULL, content TEXT, published_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP);
-- Enable text searchCREATE EXTENSION IF NOT EXISTS pg_trgm;-- Create text search indexCREATE INDEX posts_content_idx ON posts USING gin(content gin_trgm_ops);-- Search postsSELECT * FROM posts WHERE content ILIKE '%search term%'ORDER BY similarity(content, 'search term') DESC;
-- Table for document chunksCREATE TABLE knowledge_base ( id SERIAL PRIMARY KEY, document_id VARCHAR(255), chunk_index INTEGER, content TEXT, embedding vector(384), metadata JSONB);-- Index for fast similarity searchCREATE INDEX ON knowledge_base USING ivfflat (embedding vector_cosine_ops);-- Query knowledge baseSELECT content, metadata, 1 - (embedding <=> $1::vector) as similarityFROM knowledge_base WHERE 1 - (embedding <=> $1::vector) > 0.7ORDER BY embedding <=> $1::vectorLIMIT 5;
-- IVFFlat index (good for most cases)CREATE INDEX embedding_idx ON documents USING ivfflat (embedding vector_cosine_ops) WITH (lists = 100);-- HNSW index (better recall, more memory)CREATE INDEX embedding_hnsw_idx ON documents USING hnsw (embedding vector_cosine_ops) WITH (m = 16, ef_construction = 64);
-- Use EXPLAIN to analyze queriesEXPLAIN (ANALYZE, BUFFERS) SELECT * FROM documents WHERE embedding <=> '[...]'::vector < 0.5;-- Vacuum and analyze regularlyVACUUM ANALYZE documents;
-- Check if pgvector is installedSELECT * FROM pg_extension WHERE extname = 'vector';-- Check vector dimensionsSELECT avg(array_length(embedding, 1)) FROM documents;-- Rebuild vector index if neededREINDEX INDEX embedding_idx;