Guia del Programador de PostgreSQL | ||
---|---|---|
Anterior | Revisi�n de las caracter�sticas internas de PostgreSQL | Siguiente |
Postgres utiliza un poderoso sistema de reglas para la especificaci�n de vistas y actualizaciones de vistas ambiguas. Originalmente el sistema de reglas de Postgres consist�a en dos implementaciones:
El primero trabajaba utilizando el procesado a nivel de tupla y se implementaba en el ejecutor. El sistema de reglas se disparaba cada vez que se acced�a una tupla individual. Esta implementaci�n se retir� en 1.995 cuando la �ltima versi�n oficial del proyecto Postgres se transform� en Postgres95.
La segunda implementaci�n del sistema de reglas es una t�cnica llamada reescritura de la consulta. El sistema de reescritura es un m�dulo que existe entre la etapa del traductor y el planificador/optimizador. Est� t�cnica contin�a implementada.
Para informaci�n sobre la sintaxis y la creaci�n de reglas en sistema Postgres Dir�jase a la Gu�a del Usuario de PostgreSQL.
El sistema de reescritura de la consulta es un m�dulo entre la etapa de traducci�n y el planificador/optimizador. Procesa el �rbol devuelto por la etapa de traducci�n (que representa una consulta de usuario) y si existe una regla que deba ser aplicada a la consulta reescribe el �rbol de una forma alternativa.
Ahora esbozaremos el algoritmo del sistema de reescritura de consultas. Para una mejor ilustraci�n, mostraremos como implementar vistas utilizando reglas como ejemplo.
Tengamos la siguiente regla:
create rule view_rule as on select to test_view do instead select s.sname, p.pname from supplier s, sells se, part p where s.sno = se.sno and p.pno = se.pno; |
Esta regla se disparar� cada vez que se detecte una SELECT contra la relaci�n test_view. En lugar de seleccionar las tuplas de test_view, se ejecutar� la instrucci�n SELECT dada en la parte de la acci�n de la regla.
Tengamos la siguiente consulta de usuario contra test_view:
select sname from test_view where sname <> 'Smith'; |
Tenemos aqu� una lista de los pasos realizados por el sistema de reescritura de la consulta cada vez que aparece una consulta de usuario contra test_view. (El siguiente listado es una descripci�n muy informal del algoritmo �nicamente para una comprensi�n b�sica. Para una descripci�n detallada dir�jase a Stonebraker et al, 1989).
Reescritura de test_view
Toma la consulta dada por la parte de acci�n de la regla.
Adapta la lista-objetivo para recoger el n�mero y orden de los atributos dados en la consulta del usuario.
A�ade la cualificaci�n dada en la cl�usula WHERE de la consulta del usuario a la cualificaci�n de la consulta dada en la parte de la acci�n de la regla.
Dada la definici�n de la regla anterior, la consulta del usuario ser� reescrita a la siguiente forma (N�tese que la reescritura se hace en la representaci�n interna de la consulta del usuario devuelta por la etapa de traducci�n, pero la nueva estructura de datos representar� la siguiente consulta):
select s.sname from supplier s, sells se, part p where s.sno = se.sno and p.pno = se.pno and s.sname <> 'Smith'; |