Re: Rules y Select

From: Oswaldo Hernández <listas(at)soft-com(dot)es>
To: Postgresql <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Rules y Select
Date: 2006-12-24 13:08:59
Message-ID: 458E7BEB.2020209@soft-com.es
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Alvaro Herrera escribió:
> Oswaldo Hernández escribió:
>> Hola a todos,
>>
>> Estoy intentando crear la siguiente 'rule' y obtengo un error:
>>
>> (PostgreSQL 8.1.4 Windows)
>>
>> soft-com=# CREATE RULE costes_select AS ON SELECT TO costes WHERE (not
>> has_table_privilege('costes', 'SELECT')) DO INSTEAD select NULL, NULL;
>> ERROR: event qualifications are not implemented for rules on SELECT
>>
>> Entiendo que la clausula WHERE no esta implementada para SELECT. ¿Es
>> correcto?
>
> No puedes aplicar reglas en SELECT. Las unicas reglas en SELECT
> permitidas deben llamarse _RETURN y tienen que ver con las vistas.
> (Debo agregar que el crear una regla _RETURN sobre una tabla la
> convierte en una vista, pero no debes confiar en este comportamiento
> porque sólo se entrega para compatibilidad con dumps generados por
> versiones de pg_dump anteriores a no sé cual, creo que 7.0).
>
>> Si es asi, lo que pretendo es que cuando el usuario no tenga permiso de
>> select sobre la tabla devuelva valores nulos en vez de generar un error.
>
> Humm, quizas usando una SRF puedas lograr eso.
>

La rule parecia una solucion limpia.

Con SRF si hago el select directamente sobre la funcion si va, pero si intento hacer la rule para
que al hacer el select sobre la tabla lo haga sobre la funcion da el siguiente error:

create rule rule_costes as on select to costes do instead select * from select_costes();
ERROR: view rule for "costes" must be named "_RETURN"

si la hago como return:

create rule "_RETURN" as on select to costes do instead select * from select_costes();
ERROR: could not convert table "costes" to a view because it has triggers
HINT: In particular, the table may not be involved in any foreign key relationships.

Ademas como la funcion lee sobre la misma tabla creo que se crearia una regla circular.

Otro problema que encuentro es que la funcion devolveria los datos en un ciclo for..loop los cual
creo que impediria el uso de los indices de la tabla cuando estuviera involucrada en un select complejo.

Creo que tendré que abandonar la idea y pensar en otra solucion.

Gracias.

--
*****************************************
Oswaldo Hernández
oswaldo (@) soft-com (.) es
*****************************************

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Marconi Poveda 2006-12-26 04:42:34 Aceptar conexiones TCPIP
Previous Message Alvaro Herrera 2006-12-24 11:30:46 Re: Rules y Select