51.1. La ruta de una consulta #

Aquí ofrecemos una breve descripción general de las etapas por las que debe pasar una consulta para obtener un resultado.

  1. Se debe establecer una conexión desde un programa de aplicación al servidor de PostgreSQL. El programa de aplicación transmite una consulta al servidor y espera recibir los resultados enviados de vuelta por el servidor.

  2. La etapa del analizador (parser stage) comprueba la consulta transmitida por el programa de aplicación para verificar que la sintaxis sea correcta y crea un árbol de consulta (query tree).

  3. El sistema de reescritura (rewrite system) toma el árbol de consulta creado por la etapa del analizador y busca cualquier regla (guardada en los catálogos del sistema) para aplicarla al árbol de consulta. Realiza las transformaciones dadas en los cuerpos de las reglas (rule bodies).

    Una aplicación del sistema de reescritura es la realización de vistas (views). Cada vez que se realiza una consulta contra una vista (es decir, una tabla virtual), el sistema de reescritura reescribe la consulta del usuario a una consulta que accede en su lugar a las tablas base dadas en la definición de la vista.

  4. El planificador/optimizador (planner/optimizer) toma el árbol de consulta (reescrito) y crea un plan de consulta (query plan) que será la entrada para el ejecutor (executor).

    Lo hace creando primero todas las rutas (paths) posibles que conducen al mismo resultado. Por ejemplo, si hay un índice en una relación que se va a escanear, hay dos rutas para el escaneo. Una posibilidad es un escaneo secuencial simple y la otra posibilidad es utilizar el índice. A continuación, se estima el costo de ejecución de cada ruta y se elige la ruta más barata. La ruta más barata se expande en un plan completo que el ejecutor puede usar.

  5. El ejecutor recorre recursivamente el árbol de plan (plan tree) y recupera las filas de la manera representada por el plan. El ejecutor hace uso del sistema de almacenamiento (storage system) mientras escanea relaciones, realiza ordenamientos (sorts) y uniones (joins), evalúa las condiciones de calificación (qualifications) y finalmente entrega las filas derivadas.

En las siguientes secciones cubriremos cada uno de los elementos enumerados anteriormente con más detalle para dar una mejor comprensión de las estructuras de datos y de control interno de PostgreSQL.