rag_template / db /migrations /003_add_metadata.sql
Guilherme Favaron
Sync: Complete project update (Phase 6) - API, Metadata, Eval, Docs
a686b1b
-- Migracao 003: Adicionar coluna de metadata JSONB
-- Data: 2026-01-23
-- Descricao: Adiciona suporte a metadados extensiveis para filtros avancados
-- Adicionar coluna metadata
ALTER TABLE documents
ADD COLUMN IF NOT EXISTS metadata JSONB DEFAULT '{}'::jsonb;
-- Indice GIN para busca eficiente em JSONB
CREATE INDEX IF NOT EXISTS idx_documents_metadata
ON documents USING GIN (metadata);
-- Indices especificos para campos comuns
-- Indice para tags (array JSONB)
CREATE INDEX IF NOT EXISTS idx_documents_tags
ON documents USING GIN ((metadata->'tags'));
-- Indice para document_type
CREATE INDEX IF NOT EXISTS idx_documents_type
ON documents ((metadata->>'document_type'));
-- Indice para security_level
CREATE INDEX IF NOT EXISTS idx_documents_security
ON documents ((metadata->>'security_level'));
-- Indice para department
CREATE INDEX IF NOT EXISTS idx_documents_department
ON documents ((metadata->>'department'));
-- Indice para author
CREATE INDEX IF NOT EXISTS idx_documents_author
ON documents ((metadata->>'author'));
-- Indice para upload_date (com cast para timestamp)
CREATE INDEX IF NOT EXISTS idx_documents_upload_date
ON documents (((metadata->>'upload_date')::timestamp));
-- Comentarios
COMMENT ON COLUMN documents.metadata IS 'Metadados extensiveis em formato JSONB para filtros avancados';
-- Exemplo de uso:
-- INSERT INTO documents (title, content, embedding, metadata)
-- VALUES ('Doc 1', 'Conteudo...', '[...]', '{"document_type": "PDF", "tags": ["tech", "ai"]}'::jsonb);
-- SELECT * FROM documents WHERE metadata->>'document_type' = 'PDF';
-- SELECT * FROM documents WHERE metadata->'tags' ?| array['tech', 'ai'];