Lista de verificación de reglas del proyecto Postgres
25 reglas de verificación para esquemas, consultas, migraciones y operaciones. Úselo al inicio del proyecto, en auditorías trimestrales y antes de lanzamientos importantes.
Cómo usar esta lista de verificación
- Trabaje de arriba a abajo para proyectos nuevos; omita las secciones ya certificadas.
- Verifique los elementos en las plantillas de PR para cambios que afecten a la base de datos.
- Los elementos fallidos se convierten en tickets con propietario y fecha de vencimiento, no en notas de reunión.
Esquema y Nomenclatura (1-5)
- 1.
snake_casepara tablas, columnas y restricciones. SincamelCaseen objetos SQL. - 2. Nombres de tabla singulares o plurales: elija uno para todo el equipo. Documente en ADR; nunca mezcle
useryorders. - 3. Claves primarias nombradas
ido{table}_idde forma consistente. Se prefierenbigintoidentitysustitutos. - 4.
timestamptzpara todos los instantes; nuncatimestamp without time zonepara eventos. Los errores de zona horaria son costosos. - 5. Claves foráneas en las relaciones de las que depende la aplicación. Integridad referencial en DDL, no en esperanza.
Índices y Consultas (6-10)
- 6.
EXPLAIN (ANALYZE, BUFFERS)en nuevas consultas de API antes de fusionar. Sin escaneos secuenciales ilimitados en tablas grandes. - 7. Cada consulta de producción tiene un límite de filas o de agregación. Las API no hacen
SELECT *de millones de filas. - 8. Las columnas de índice coinciden con los predicados
WHEREyJOINde forma más a la izquierda. Orden compuesto documentado en PR. - 9. Índices parciales donde las consultas siempre filtran por estado/inquilino. Escrituras más pequeñas, más rápidas y más baratas.
- 10. Elimine los índices no utilizados anualmente. Se revisan los candidatos de
pg_stat_user_indexes.idx_scan = 0.
Migraciones (11-15)
- 11. SQL versionado en git; sin DDL manual en producción. Las correcciones urgentes se rellenan en los archivos de migración el mismo día.
- 12.
lock_timeoutestablecido en los scripts de migración. Fallar rápido, no bloquear el tráfico. - 13. DDL de tablas grandes utiliza los patrones
CONCURRENTLYyNOT VALID. Consulte la guía de tiempo de inactividad cero. - 14. Expandir/contraer para cambios que rompen la compatibilidad. Sin
DROP COLUMNen la misma versión con riesgo de retroceso de la aplicación. - 15. CI migra una base de datos vacía en cada PR. Los permisos y el orden se validan automáticamente.
Seguridad y Acceso (16-20)
- 16. La aplicación nunca usa superusuario. Los roles de "break-glass" se registran y son raros.
- 17. Rol de aplicación de mínimo privilegio; migrador separado. El rol de propietario es
NOLOGIN. - 18. RLS en datos de inquilino en esquema compartido con
FORCE. Indexartenant_iden las políticas. - 19. Autenticación
SCRAM-SHA-256; sintrusten TCP. Red de denegación predeterminada depg_hba.conf. - 20. TLS requerido para conexiones remotas.
hostsslenhbapara subredes de aplicaciones.
Operaciones (21-25)
- 21. Ejecute la versión menor actual de la versión mayor compatible. PostgreSQL 13 EOL pasado - existe un plan de actualización.
- 22. Copias de seguridad probadas con simulacro de restauración trimestralmente. Las copias de seguridad sin restauración son pensar en deseos.
- 23.
pg_stat_statementso información de consulta equivalente habilitada. Las consultas principales se revisan mensualmente. - 24. Autovacuum monitoreado; sin sesiones largas
idle-in-transaction. El horizontexmines visible en los paneles. - 25. Agrupación de conexiones (PgBouncer) antes de aumentar
max_connectionsmás allá de 200. Las matemáticas de la agrupación documentadas.
Cuando haya terminado
- Archive los resultados de la lista de verificación en la wiki del equipo o en un ticket de auditoría.
- Programe un sprint de remediación para los elementos de operaciones y seguridad fallidos primero.
- Vuelva a ejecutar después de una actualización de versión importante o un cambio de aislamiento de inquilino.
Relacionado
- Reglas de nomenclatura y estilo - profundidad de la nomenclatura
- Reglas de índices y consultas - estándares de consulta
- Reglas de seguridad de migración - tiempos de espera de implementación
- Reglas de seguridad - reglas de control de acceso
Versiones de la pila: Esta página se escribió para PostgreSQL 18.4 (estable 18, mantenimiento 17), pgvector 0.8+, PgBouncer 1.x, Patroni 3.x y PostGIS 3.5+.