PostgreSQL para todo

Los defensores de PostgreSQL sostienen que puede sustituir una amplia gama de infraestructura —desde colas de mensajes y motores de búsqueda hasta bases de datos de series temporales y vectoriales—, permitiendo que equipos pequeños entreguen más rápido al usar “solo Postgres”. Otros responden que, aunque esto funciona bien a una escala modesta, herramientas especializadas como ClickHouse, Kafka, Elasticsearch o colas dedicadas se vuelven necesarias a medida que crecen los volúmenes de datos, las necesidades de rendimiento y la complejidad operativa. Un tema recurrente es empezar con PostgreSQL (o incluso SQLite) como valor predeterminado simple y luego introducir sistemas adicionales solo cuando se alcancen límites concretos de escala o de funcionalidades.

Contexto histórico: MySQL vs PostgreSQL

  • A principios de los 2000: MySQL era el valor predeterminado en el hosting LAMP/PHP, y se lo consideraba más rápido en parte porque MyISAM omitía transacciones y durabilidad.
  • Con el tiempo, Postgres añadió funciones y estabilidad, mientras que los problemas de diseño de MySQL, sus malos valores predeterminados y la posterior adquisición por Oracle alejaron a algunos usuarios.
  • MySQL tuvo ventajas operativas al principio (instaladores fáciles, replicación maestro–maestro), pero Postgres se convirtió en el valor predeterminado del “RDBMS adecuado” a partir de mediados de los 2000.

SQLite vs PostgreSQL

  • Varios comentaristas usan felizmente SQLite “para todo” a pequeña escala; NVMe + herramientas de replicación como Litestream se consideran suficientes para muchas apps.
  • Otros advierten sobre el sistema de tipos más débil de SQLite, la ausencia nativa de DATE/TIME/TIMESTAMP y su comportamiento divergente respecto de Postgres, y sostienen que los entornos de desarrollo deberían coincidir con producción.
  • Algunos dicen que SQLite es ideal para escenarios de un solo servidor o embebidos; Postgres es mejor cuando necesitas varios escritores, tipos estrictos, control de acceso y replicación.

“Postgres para todo” – apoyo

  • Muchos usan Postgres como valor predeterminado: base de datos OLTP, almacén JSON, búsqueda de texto completo, almacén vectorial, cola, bus de mensajes, registros e incluso analítica básica.
  • Se destacaron extensiones y funciones: JSONB, índices trigram, PostGIS, grafos de propiedades (PG 19), pgvector/pgvectorscale, agregados continuos de Timescale, ML en GPU (PostgresML), LISTEN/NOTIFY.
  • Argumento: la mayoría de las apps son pequeñas o medianas; un sistema bien entendido y gestionado supera a una pila compleja (Kafka, Elasticsearch, Redis, etc.) hasta que la escala obliga a cambiar.

“Postgres para todo” – escepticismo

  • Los críticos dicen que los artículos exageran Postgres frente a herramientas especializadas:
    • Búsqueda: no iguala la potencia de Elasticsearch; nuevos proyectos de búsqueda basados en Postgres intentan cerrar la brecha.
    • OLAP/analítica: ClickHouse, BigQuery y motores columnares sobre almacenamiento de objetos son enormemente mejores para analítica grande y ad hoc.
    • Series temporales y vectores: Timescale/pgvector pueden entrar en conflicto con otras cargas de trabajo y degradar cachés/CPU con volúmenes altos.
    • Blobs: almacenar BYTEA grandes perjudica buffers, copias de seguridad y WAL; el almacenamiento de objetos suele ser preferible.
  • Preocupaciones operativas: ajuste de vacuum, modelo de proceso por conexión, necesidad de pooling de conexiones, alta disponibilidad/fragmentación (Patroni, fragmentación personalizada) se consideran nada triviales.

Filosofía de diseño y escala

  • Heurística ampliamente compartida: “Empieza con Postgres (o con lo que conoces) hasta que descubras por qué no puedes; luego añade herramientas especializadas.”
  • Contrapunto: diseñarlo todo alrededor de una única instancia de Postgres puede crear un cuello de botella central y migraciones complejas más adelante; piensa en los requisitos futuros de escala y disponibilidad.
  • Consenso general: Postgres es un excelente, y a menudo el mejor, valor predeterminado para la mayoría de los casos de uso, pero no literalmente “para todo”, especialmente a escalas muy grandes o para cargas de trabajo altamente especializadas.