> -----Mensaje original-----
> De: [email protected]
>
> Hola muchachos, espero que todos estén muy bien.
>
> Como esto de estar dando privilegios tabla por tabla resulta
> muy tedioso cuando se necesita hacer un ALL PRIVILEGES sobre
> todas las tablas de nuestra base, se me ha ocurrido hacer una
> query así:
>
> GRANT ALL PRIVILEGES ON (SELECT viewname FROM pg_views
> WHERE schemaname='public'
> UNION
> SELECT tablename FROM pg_tables WHERE schemaname='public'
> UNION
> SELECT relname FROM pg_statio_all_sequences WHERE
> schemaname='public') TO prueba_permisos;
>
> Quizá algunos ya se imaginen que no sirvió :(
>
> Hay alguna forma de que esta query sí pueda servir? o más
> bien que se construya una que haga lo que deseo?????
>
Esta función te lo resuelve:
CREATE OR REPLACE FUNCTION grant_all_privileges(p_user text, p_schema text)
RETURNS void AS
$BODY$
DECLARE
objeto text;
BEGIN
FOR objeto IN
SELECT tablename FROM pg_tables WHERE schemaname = p_schema
UNION
SELECT relname FROM pg_statio_all_sequences WHERE schemaname =
p_schema
LOOP
RAISE NOTICE 'Asignando todos los privilegios a % sobre %.%', p_user,
p_schema, objeto;
EXECUTE 'GRANT ALL PRIVILEGES ON ' || p_schema || '.' || objeto || '
TO ' || p_user ;
END LOOP;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;
La usas así:
select grant_all_privileges('postgres', 'temp');
Saludos,
Fernando
--
TIP 5: ¿Has leído nuestro extenso FAQ?
http://www.postgresql.org/docs/faqs.FAQ.html