On Fri, Sep 18, 2009 at 10:37 PM, Alvaro Herrera <alvhe...@alvh.no-ip.org>wrote:

> Sergio Gabriel Rodriguez escribió:
> > >
> > > Luego de haber echo el cambio que dices, volviste a hacer la prueba que
> > > sugiere Alvaro sin ningún problema?
> > >
> > >
> > > >>>> create schema "mi esquema" create table "mi tabla" ();
> > > >>>> select dar_permisos("mi esquema", current_user, 'all');
> >
> > Si, anduvo bien, mi pregunta apunta a si hay algún otro error que no
> estoy
> > viendo
>
> ¿Funciona realmente?  Lo que quería hacerte notar es que debes usar
> quote_ident:
>
> CREATE OR REPLACE FUNCTION "public"."dar_permisos" (esquema varchar,
> usuario varchar, privilegio varchar) RETURNS boolean AS
> $BODY$
> DECLARE
>    registro  record;
> BEGIN
>  FOR registro IN SELECT * FROM pg_tables WHERE schemaname= esquema LOOP
>           EXECUTE 'GRANT ' || privilegio || ' ON ' || quote_ident(esquema)
> || '.' ||
> quote_ident(registro.tablename) || ' TO ' || quote_ident(usuario);
>   END LOOP;
>  RETURN TRUE;
> END;
> $BODY$
> LANGUAGE 'plpgsql' VOLATILE ;


Gracias Alvaro, si funcionó, pero pensé que apuntabas al tipo de dato de
current_user y cambié el parámetro usuario de varchar a name,  no noté lo de
quote_indent lo voy a probar


Sergio Gabriel Rodríguez
http://www.3trex.com.ar

Responder a