Log in to leave a comment
No posts yet
PostgreSQL ha dejado de ser un simple almacén de datos. No es casualidad que en la encuesta de Stack Overflow de 2025 haya superado a MySQL por 15 puntos porcentuales para ocupar el primer lugar. Al montar PostgREST sobre esta potente base de datos, no hay necesidad de escribir tediosas API CRUD con Node.js o Python. Sin embargo, muchos dudan ante la integración de pagos o configuraciones de permisos complejas. Surge la pregunta: "¿Realmente funcionará esto sin un servidor?". La respuesta corta es sí, y además de una manera muy elegante.
La mayor preocupación al usar PostgREST son las llamadas HTTP externas, como la aprobación de pagos o el envío de correos electrónicos. Esperar a un servidor externo dentro de la base de datos es una idea terrible. Sin embargo, con el módulo de extensión pg_net, la historia cambia. Esta herramienta, basada en libcurl, lanza peticiones de forma asíncrona sin esperar la respuesta de la API externa.
Este método brilla al integrar APIs de pago como Toss Payments. La transacción principal simplemente guarda los datos y termina de inmediato. La llamada real a la API se procesa en una cola en segundo plano. De esta forma, la velocidad de respuesta de la API puede mantenerse por debajo de los 200ms, independientemente del estado del servidor externo. Al ver que el rendimiento total del sistema se triplica, se preguntará por qué pasó por tantas dificultades con un servidor de API.
La lógica compleja para verificar inventario y procesar pedidos suele resolverse con sentencias if-else en el código backend. Pero este es el comienzo de la corrupción de datos. En su lugar, intente usar pg_jsonschema. Esta extensión escrita en Rust completa 100,000 coincidencias de patrones JSON en solo 48ms.
El método es claro: aplique restricciones CHECK a las tablas o cree disparadores BEFORE INSERT. Si las condiciones no se cumplen, lance un error con RAISE EXCEPTION. En este punto, si especifica el SQLSTATE como PT402, PostgREST enviará automáticamente el código 402 Payment Required al cliente. Ahorre esas 5 horas que perdía escribiendo código de validación en el backend y utilícelas en un modelado de datos más importante.
En PostgREST, los parámetros de la URL del cliente se convierten directamente en consultas. Es conveniente, pero peligroso. Filtrar por columnas sin índices abre las puertas al infierno del rendimiento. Aquí, pg_stat_statements es esencial, ya que muestra en tiempo real qué consultas están consumiendo los recursos.
En la práctica, analizar el plan de ejecución con el comando EXPLAIN (ANALYZE, BUFFERS) y cambiar los escaneos secuenciales por escaneos de índice puede mejorar el rendimiento más de 3 veces. El ahorro del 30% en costos de la nube es una ventaja adicional. Si se requieren cálculos complejos, indexar columnas generadas virtualmente en PostgreSQL 18 también es una excelente opción.
Deje de añadir capas de middleware al backend por seguridad. PostgREST aprovecha al 100% la Seguridad a Nivel de Fila (RLS) de PostgreSQL. La información del usuario contenida en el JWT se lee con la función current_setting para controlar los permisos a nivel de SQL.
Una política como "permitir que solo los suscriptores de pago vean este artículo" se resuelve con una sola sentencia CREATE POLICY. Esto evita de raíz accidentes de filtración de datos causados porque un desarrollador olvidó llamar a una función de verificación de permisos en el código. Para operaciones sensibles como el cambio de contraseña, basta con encapsularlas en una función con la opción SECURITY DEFINER. Al centralizar la lógica de seguridad en la BD, la gestión se vuelve mucho más sencilla.
En una arquitectura PostgREST, un cambio de esquema es una actualización de la API. Hacer esto manualmente garantiza accidentes. Es necesario gestionar todos los cambios en archivos .sql usando herramientas como dbmate.
Al configurar un pipeline en GitHub Actions, los cambios se reflejan automáticamente en el servidor de staging cada vez que se hace push al código. Una vez finalizada la migración, envíe una señal SIGUSR1 a PostgREST o ejecute NOTIFY pgrst, 'reload schema'. La API se actualizará al estado más reciente sin tiempo de inactividad. Es la forma más segura para que incluso un desarrollador en solitario tenga una estabilidad operativa de nivel empresarial.