Saltar a contenido

ADR 0002 — Postgres sobre SQL Server

Estado: aceptado, con condición Fecha: 2026-09

Contexto

La casa usa SQL Server. Esta decisión diverge de esa convención y por eso necesita justificación explícita.

Decisión

Postgres.

Razones

JSONB. Guardamos el payload crudo de cada fuente tal como llegó, para poder reprocesar el normalizador sin volver a descargar. Con APIs que tienen cuota —SAM.gov, IATI— eso no es comodidad, es necesidad. JSONB con índices GIN hace esto natural.

Búsqueda de texto completo nativa sobre los pliegos extraídos, sin montar un Elasticsearch al lado.

Soporte de primera clase en Django. El backend de SQL Server es de terceros y siempre va un paso atrás en features del ORM y en migraciones.

Condición

Revisar si hay razón organizacional dura

Si existe una razón organizacional real para SQL Server —licenciamiento ya pagado, política de infraestructura, equipo de DBA que solo opera SQL Server— esta decisión se reevalúa.

Lo que no es razón válida es la inercia.

Consecuencias

  • Un motor más que operar en la casa
  • Backups y monitoreo propios
  • El equipo tiene que mantener fluidez en dos dialectos SQL

Notas de implementación

  • Todas las fechas en timestamptz, en UTC
  • Índice GIN sobre las columnas crudo
  • Índice de texto completo sobre documentos.texto