| From: | Manuel Sugawara <masm(at)fciencias(dot)unam(dot)mx> |
|---|---|
| To: | "Magnvs -- Carles Querol" <magnvsctv(at)hotmail(dot)com> |
| Cc: | pgsql-ayuda(at)tlali(dot)iztacala(dot)unam(dot)mx |
| Subject: | Re: [Pgsql-ayuda] procedimientos (esto me va a matar) |
| Date: | 2004-03-16 21:11:24 |
| Message-ID: | m31xnso5tv.fsf@conexa.fciencias.unam.mx |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-es-ayuda |
"Magnvs -- Carles Querol" <magnvsctv(at)hotmail(dot)com> writes:
> Hola, sigo con mi cruzada personal con los procedimientos almacenados... He
> escrito esto para modificar los permisos de un solo usuario a las tablas y
> secuencias de una base de datos (inicialmente quería que el procedimiento
> leyese el nombre del usuario como parámetro y modificar los permisos, pero
> no hay forma de que funcione).
Utiliza execute, ej:
CREATE OR REPLACE FUNCTION public.privilegis(text)
RETURNS int4 AS
'
DECLARE
username alias for $1;
taula1 record;
taula2 record;
suma int4;
BEGIN
suma:=0;
FOR taula1 IN SELECT *
FROM pg_tables
LOOP
IF taula1.schemaname=\'public\' THEN
execute ''GRANT ALL ON TABLE '' || taula1.schemaname || ''.'' || taula1.tablename || '' TO '' || username;
END IF;
suma:=suma+1;
END LOOP;
FOR taula2 IN SELECT *
FROM pg_statio_user_sequences
LOOP
IF taula2.schemaname=\'public\' THEN
execute ''GRANT ALL ON TABLE '' || taula2.schemaname || ''.'' || taula2.tablename || '' TO '' || username;
END IF;
suma:=suma+1;
END LOOP;
RETURN suma;
END;
'
LANGUAGE 'plpgsql';
Saludos,
Manuel.
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Danny Zurita Y. | 2004-03-16 22:29:45 | [Pgsql-ayuda] novato en postgres |
| Previous Message | Magnvs -- Carles Querol | 2004-03-16 20:07:54 | [Pgsql-ayuda] procedimientos (esto me va a matar) |