Recetas de PostgreSQL
- Cambiar de segmento WALWAL y checkpoint
- Ejecutar un CHECKPOINT manualWAL y checkpoint
- Mostrar el tamaño del WAL y el LSN actualWAL y checkpoint
- Mostrar el retraso del archivado (WAL aún no archivado)WAL y checkpoint
- Añadir un nuevo tablespaceAlmacenamiento
- Mover una tabla a otro tablespaceAlmacenamiento
- Mover un índice a otro tablespaceAlmacenamiento
- Consultar el tamaño de la base de datos y de las tablasAlmacenamiento
- Estimar el bloat de una tablaAlmacenamiento
- VACUUM ANALYZE de una tabla concretaMantenimiento
- Ejecutar un VACUUM FREEZE agresivoMantenimiento
- Reconstruir un índice sin bloqueos (REINDEX CONCURRENTLY)Mantenimiento
- Ajustar autovacuum para una tabla concretaMantenimiento
- Aumentar el statistics target de una columnaMantenimiento
- Cambiar un parámetro y recargar (ALTER SYSTEM)Parámetros
- Cambiar un parámetro para la sesión (SET)Parámetros
- Mostrar el valor actual de un parámetroParámetros
- Construir una réplica física (pg_basebackup)Replicación
- Promover una réplica a primarioReplicación
- Mostrar el lag de replicaciónReplicación
- Crear y eliminar un replication slotReplicación
- Configurar una publicación y una suscripción de replicación lógicaReplicación
- Terminar un backend (pg_terminate_backend)Sesiones
- Cancelar una consulta en ejecución (pg_cancel_backend)Sesiones
- Mostrar consultas activas y bloqueantesSesiones
- Añadir una extensiónExtensiones
- Listar las extensiones instaladasExtensiones
- Mostrar el estado, la topología y el historial del clúster PatroniPatroni
- Realizar un switchover planificado con PatroniPatroni
- Realizar un failover manual con PatroniPatroni
- Reconstruir una réplica dañada con Patroni (reinit)Patroni
- Cambiar parámetros de todo el clúster en Patroni (edit-config) y aplicar los reinicios pendientesPatroni
- Poner Patroni en modo mantenimiento y salir de él (pause/resume)Patroni
- Comprobar la salud del DCS de Patroni (etcd/Consul) y de la REST APIPatroni
- Configurar el archivado de WAL para pgBackRest (archive-push/archive-get)Backup y PITR
- Crear la stanza de pgBackRest y verificar el archivado (stanza-create/check)Backup y PITR
- Tomar backups completos, diferenciales e incrementales con pgBackRestBackup y PITR
- Mostrar el catálogo de backups de pgBackRest y el rango del archivo de WAL (info)Backup y PITR
- Restaurar el último backup con pgBackRestBackup y PITR
- Restaurar a un punto en el tiempo con pgBackRest (PITR, --type=time)Backup y PITR
- Reconstruir rápidamente un standby con delta restore de pgBackRestBackup y PITR
- Configurar la retención de pgBackRest y ejecutar expireBackup y PITR
- Configurar un standby manualmente (standby.signal + primary_conninfo)Replicación
- Monitorear el lag de recepción y replay de WAL en el standby (pg_stat_wal_receiver)Replicación
- Reincorporar el antiguo primario como réplica tras un failover con pg_rewindReplicación
- Configurar la replicación síncrona con quorum (ANY) o prioridad (FIRST)Replicación
- Monitorear el WAL retenido por los replication slots y eliminar con seguridad un slot abandonadoReplicación
- Limitar el WAL que pueden retener los slots (max_slot_wal_keep_size)Replicación
- Añadir una tabla a una publicación y refrescar la suscripción (REFRESH PUBLICATION)Replicación lógica
- Monitorear la replicación lógica (pg_stat_subscription, errores de apply, lag de slots)Replicación lógica
- Resolver un conflicto de replicación lógica (disable_on_error, SKIP)Replicación lógica
- Sincronizar los valores de las secuencias en el suscriptor en la replicación lógicaReplicación lógica
- Eliminar una suscripción y limpiar un slot lógico huérfano en el publicadorReplicación lógica
- Upgrade de versión mayor con pg_upgrade --link (runbook de principio a fin)Upgrade
- Upgrade de versión mayor casi sin tiempo de inactividad con replicación lógicaUpgrade
- Mostrar pools, estadísticas y conexiones de PgBouncer (SHOW POOLS/STATS/CLIENTS/SERVERS)PgBouncer
- Retener conexiones durante el mantenimiento con PgBouncer (PAUSE/RESUME) y recargar la configuración (RELOAD)PgBouncer
- Elección de pool_mode en PgBouncer y dimensionamiento básicoPgBouncer
- Encontrar las consultas más costosas (pg_stat_statements: tiempo total y medio)Rendimiento
- Encontrar las consultas que generan I/O de disco, archivos temporales y WAL (pg_stat_statements)Rendimiento
- Restablecer las estadísticas de pg_stat_statements (todas o una sola consulta)Rendimiento
- Registrar los planes de ejecución de las consultas lentas con auto_explainRendimiento
- Leer un plan en profundidad con EXPLAIN (ANALYZE, BUFFERS, SETTINGS, WAL)Rendimiento
- Detectar regresiones de plan por queryid (comparación de snapshots de pg_stat_statements)Rendimiento
- Comprobar la capacidad de consultas paralelas y el uso actual de workersRendimiento
- Medir el impacto de la compilación JIT en el tiempo de consultaRendimiento
- Construir el árbol de bloqueos (encontrar el bloqueador raíz)Sesiones
- Inspeccionar en detalle las esperas de bloqueo por objeto y modo de bloqueo (pg_locks)Sesiones
- Encontrar transacciones de larga duración e 'idle in transaction'Sesiones
- Terminar de forma masiva y controlada las sesiones 'idle in transaction' largasSesiones
- Definir statement_timeout / lock_timeout por rol y base de datosSesiones
- Aplicar DDL de forma segura con lock_timeout y reintentos (evitar colas de bloqueo)Sesiones
- Medir el uso de conexiones respecto a max_connectionsSesiones
- Monitorear el progreso de las operaciones autovacuum/VACUUM en cursoMantenimiento
- Medir el riesgo de transaction ID wraparound (antigüedad de XID por base de datos y tabla)Mantenimiento
- Encontrar los que retienen el xmin horizon e impiden que VACUUM elimine dead tuplesMantenimiento
- Medir el bloat de tablas e índices con pgstattupleMantenimiento
- Reorganizar una tabla con bloat sin bloqueos largos (pg_repack)Mantenimiento
- Encontrar y limpiar índices INVALIDMantenimiento
- Crear estadísticas extendidas para columnas correlacionadas (CREATE STATISTICS)Mantenimiento
- Encontrar tablas con estadísticas obsoletas (estrategia de ANALYZE)Mantenimiento
- Comprobar la cobertura del visibility map y la eficiencia de Index Only ScanMantenimiento
- Crear una tabla particionada por range mensual (generar las particiones en un bucle)Particionamiento
- Conectar una tabla preparada como partición con un bloqueo breve (ATTACH PARTITION)Particionamiento
- Desconectar una partición antigua sin bloquear el tráfico activo (DETACH CONCURRENTLY)Particionamiento
- Trampa de la partición default: la nueva partición falla con 'would be violated by some row'Particionamiento
- Verificar que el partition pruning funciona (en tiempo de planificación y de ejecución)Particionamiento
- Automatizar la creación y la retención de particiones con pg_partmanParticionamiento
- Construir una jerarquía de roles de mínimo privilegio (GRANT + ALTER DEFAULT PRIVILEGES)Seguridad
- Configurar el aislamiento de inquilinos con row-level securitySeguridad
- Validar el orden de las reglas de pg_hba.conf y recargar con seguridadSeguridad
- Habilitar SSL/TLS y verificar las conexiones cifradas (pg_stat_ssl)Seguridad
- Migrar de contraseñas md5 a scram-sha-256Seguridad
- Mantener logs de auditoría a nivel de rol y de objeto con pgauditSeguridad
- Revisar los ajustes de memoria (shared_buffers, work_mem, maintenance_work_mem)Parámetros
- Mostrar los parámetros pendientes de reinicio y los errores de los archivos de configuraciónParámetros
- Revisar el comportamiento de los checkpoints (PG17+ pg_stat_checkpointer, PG16 y anteriores pg_stat_bgwriter)Parámetros
- Listar el tamaño de las tablas desglosado en heap / índices / TOAST, y los índices más grandesAlmacenamiento
- Encontrar las extensiones con actualizaciones pendientes y actualizarlasExtensiones
- Analizar de dónde viene la I/O con pg_stat_io (tipo de backend, objeto, contexto)Extensiones