Técnico
MinIO con PostgreSQL: archivos, permisos y restauración
Guía técnica para separar adjuntos pesados de datos estructurados: buckets, metadatos, permisos, costos y prueba de restauración completa real.
Un bucket S3 guarda objetos, versiones y reglas de borrado; PostgreSQL guarda estados, usuarios y auditoría. Esa separación evita que un ERP arrastre PDF, fotos y planos dentro de consultas que deberían responder en segundos. Para una pyme industrial de Godoy Cruz, el problema aparece cuando un reporte de órdenes se demora por adjuntos de 40 MB. Esta guía muestra qué guardar en cada lugar y cómo probar la salida.
Dónde aparece el archivo que frena la base
La documentación de PostgreSQL explica que el motor usa páginas de 8 kB y que los valores TOAST tienen un límite lógico de 1 GB. La cifra corrige una costumbre: que algo entre en una columna no significa que sea cómodo para operar, respaldar y consultar. Un archivo pesado puede vivir en la base, pero cada backup, migración y reporte paga esa decisión. MinIO documenta versionado de objetos y políticas de acceso compatibles con sintaxis IAM. El antagonista técnico es el adjunto gigante dentro de la tabla: empezó como atajo, creció con remitos escaneados y terminó mezclando datos de negocio con archivos binarios. La escena se ve en un servidor con el disco de datos al 92 % y una carpeta llamada adjuntos_finales_2. La Stack Overflow Developer Survey 2025 ubica SQL con 58,6 % de uso entre todos los respondentes. El dato sirve como puente: las organizaciones siguen consultando datos relacionales a diario, y por eso conviene reservar la base para relaciones, estados y permisos. Los objetos pesados necesitan otra rutina de control.
Cómo funciona por dentro
El flujo mínimo tiene seis pasos. 1. El usuario sube un PDF, foto o plano desde el ERP, mesa de ayuda o portal. 2. La aplicación valida tipo, tamaño, responsable y permiso antes de aceptar el archivo. 3. MinIO guarda el objeto en un bucket, conserva metadatos, versión y regla de borrado. 4. PostgreSQL guarda la ruta del objeto, hash, dueño, estado, fecha, trámite y auditoría. 5. El rol de lectura entrega enlaces temporales; el rol de administración puede bloquear, mover o expirar objetos. 6. El backup copia base y bucket; la prueba restaura un registro y abre el archivo asociado. MinIO recibe bytes y metadatos; entrega objetos recuperables por API S3. PostgreSQL recibe registros estructurados; entrega consultas por cliente, orden, factura o trámite. La aplicación une ambos mundos con una clave estable: id de documento, versión y hash. Si MinIO falla, los registros siguen mostrando qué falta. Si PostgreSQL falla, el bucket conserva objetos, pero queda pendiente reconstruir contexto.
Qué se instala o configura primero
La pila inicial puede usar MinIO, PostgreSQL 17, Caddy con HTTPS, una aplicación propia o ERP, políticas de bucket, backup de base, backup de objetos y monitoreo de espacio. Un servidor 4 vCPU y 8 GB cuesta entre USD 24 y USD 45 por mes; al dólar oficial venta de $1.545 equivale a $37.080 a $69.525. Ese costo incluye cómputo básico; quedan aparte almacenamiento externo, tráfico, implementación y soporte. El criterio de avance es simple: cada adjunto nuevo debe nacer con dueño, vencimiento, permiso y prueba de recuperación, no con una columna binaria que nadie se anima a limpiar. UMSA suele empezar con un entregable pequeño: diez órdenes con adjuntos reales, dos roles, un bucket con versionado, una tabla de metadatos y una restauración completa. La primera prueba borra un archivo en ambiente de ensayo, recupera una versión anterior y abre el registro asociado desde PostgreSQL. El resultado esperado es un enlace válido, hash coincidente y auditoría de quién pidió la recuperación.
Dónde se rompe y cómo probarlo
El primer riesgo es guardar objetos sin metadatos. La señal aparece cuando el bucket tiene archivos, pero nadie sabe a qué cliente o trámite pertenecen. La prueba mínima es tomar veinte objetos y exigir id, hash, dueño y estado en PostgreSQL. El segundo riesgo es dar permisos amplios. La señal aparece cuando un usuario de compras puede listar todo el bucket. La prueba mínima es usar una cuenta de cada rol y verificar lectura, escritura, borrado y listado. El tercer riesgo es hacer backup solo de la base. La señal aparece cuando una restauración abre registros sin adjuntos. La prueba mínima es levantar base y bucket en otro ambiente, elegir una orden y abrir su PDF. El cuarto riesgo es acumular versiones sin plazo. La señal aparece cuando los objetos vencidos siguen ocupando espacio. La prueba mínima es aplicar una regla de retención en ensayo y revisar qué versiones quedan. La separación sirve cuando la restauración vuelve con registro, archivo y permiso en la misma prueba.