El sistema de reglas de Postgres

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:

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

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.

T�cnicas para implementar vistas

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

  1. Toma la consulta dada por la parte de acci�n de la regla.

  2. Adapta la lista-objetivo para recoger el n�mero y orden de los atributos dados en la consulta del usuario.

  3. 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';