Saltar al contenido principal
PostgreSQL
20 min de lectura

Arquitectura

Entiende cómo funciona PostgreSQL internamente

Arquitectura de PostgreSQL

PostgreSQL utiliza una arquitectura cliente-servidor con un modelo de procesos.

#

Componentes principales

sql
1┌─────────────────────────────────┐2│          PostgreSQL             │3│  ┌───────────────────────────┐  │4│  │    Shared Memory          │  │5│  │  ┌─────┐ ┌─────┐ ┌────┐  │  │6│  │  │Shared│ │WAL  │ │CLOG│  │  │7│  │  │Buffer│ │Buffer│ │    │  │  │8│  │  └─────┘ └─────┘ └────┘  │  │9│  └───────────────────────────┘  │10│  ┌───────────────────────────┐  │11│  │    Background Processes   │  │12│  │  ┌────┐ ┌────┐ ┌────────┐│  │13│  │  │WAL │ │Auto│ │Check-  ││  │14│  │  │Writer│ │Vaccum│ │pointer││  │15│  │  └────┘ └────┘ └────────┘│  │16│  └───────────────────────────┘  │17└─────────────────────────────────┘

#

Ciclo de vida de una consulta

1. Parser: Analiza sintaxis SQL 2. Analyzer: Valida semántica y permisos 3. Rewriter: Optimiza reglas y vistas 4. Planner: Genera plan de ejecución 5. Executor: Ejecuta el plan 6. Writer: Escribe resultados

#

Archivos importantes

  • postgresql.conf: Configuración principal
  • pg_hba.conf: Autenticación de clientes
  • pg_ident.conf: Mapeo de usuarios
  • Sintaxis

    Sintaxis
    sql
    1-- Ver configuración actual2SHOW ALL;3 4-- Ver procesos activos5SELECT * FROM pg_stat_activity;6 7-- Ver tamaño de base de datos8SELECT pg_size_pretty(pg_database_size('mi_bd'));

    Ejemplos

    Monitorear actividad

    Consultar procesos activos en PostgreSQL

    Ejemplo
    sql
    1SELECT pid, usename, application_name, state, query2FROM pg_stat_activity3WHERE state != 'idle'4ORDER BY query_start DESC;

    Resultado:

    | pid  | usename  | application_name | state  | query                            |
    |------|----------|-----------------|--------|----------------------------------|
    | 1234 | postgres | psql            | active | SELECT * FROM pg_stat_activity   |
    | 1235 | ana      | DataGrip        | active | SELECT * FROM usuarios           |