El sistema de reglas en PostgreSQL consiste en modificar las consultas de acuerdo a reglas almacenadas como parte de la base de datos. Dichas consultas modificadas son pasadas, en orden, al optimizador, planificador y finalmente al ejecutor. Esto es a diferencia de otros DBMS que simplemente implementan los sistemas de reglas como procedimientos y triggers almacenados. Este sistema es muy poderoso y puede ser empleado para procedimientos, vistas y versiones.
Para comprender cómo funciona el sistema de reglas, es necesario saber cuando es invocado y cuáles son las entradas que recibe y los resultados que arroja.
El sistema de reglas se haya entre el reconocedor sintáctico de
consultas y el optimizador. Toma la salida del reconocedor, un árbol
de consultas, y reescribe las reglas de acuerdo al catálogo
pg_rewrite
, donde se encuentran las reglas ya en formato de
árbol de consulta con alguna información extra, y produce cero o más
arboles de consulta como resultado. De esta manera, tanto la entrada
como la salida es fácilmente representable como una aserción SQL.
Los arboles de consultas son una representación interna de una
aserción SQL donde las partes individuales que lo componen son
almacenadas independientemente. Estos arboles de consulta son visibles
desde psql
al iniciar el servidor de PostgreSQL con la bandera de
debug
en nivel cuatro. Las reglas en pg_rewrite
están
escritas en el mismo formato, aún cuando no son presentadas como la
salida de depuración descrita.
Leer e interpretar un árbol de consultas requiere experiencia y conocimientos que van más allá de la intención de este documento. Sin embargo en la documentación que se distribuye con PostgreSQL se encuentra toda la información necesaria para comprender y modificar el sistema de reglas. Nuestra intención llega sólo hasta el punto donde el lector pueda utilizar de manera eficiente las reglas.