Objetivo técnico
Al terminar podrás crear dos tablas relacionadas, insertar un documento y recuperar sus chunks. No aprenderás pgvector todavía: primero necesitas entender qué datos representa cada fila.
Antes de empezar
Necesitas un proyecto Supabase con SQL Editor o un Postgres local con psql. Usa una base de práctica. Si compartes pantalla, revisa que no aparezca la cadena de conexión.
Paso a paso
- Crea la tabla de documentos y la de fragmentos:
create table documents (
id text primary key,
source text not null
);
create table chunks (
id bigserial primary key,
document_id text not null references documents(id),
position integer not null,
content text not null
);
- Inserta un documento y dos chunks:
insert into documents (id, source) values ('manual-1', 'manual.md');
insert into chunks (document_id, position, content) values
('manual-1', 0, 'Las devoluciones se aceptan durante 30 días.'),
('manual-1', 1, 'Se requiere comprobante de compra.');
- Recupera los fragmentos en orden:
select d.source, c.position, c.content
from chunks c join documents d on d.id = c.document_id
where c.document_id = 'manual-1'
order by c.position;
Verificación
La consulta debe devolver dos filas con la misma fuente y posiciones 0 y 1. Intenta insertar un chunk con document_id = 'no-existe': la foreign key debe rechazarlo.
Errores frecuentes
- No declarar relación y terminar con chunks huérfanos.
- Ejecutar texto interpolado desde el usuario en vez de parámetros.
- Confundir orden de almacenamiento con relevancia semántica.
Práctica
Agrega un segundo documento y consulta cuántos chunks tiene cada uno usando count(*) y group by. Predice las dos filas antes de ejecutar.
Puente al RAG
El Bloque 5 añadirá embeddings a chunks y buscará similitud. La trazabilidad seguirá dependiendo de document_id, source y la relación que acabas de comprobar.