Tienes al menos dos opciones.
El primero hace uso de una pequeña consulta y un editor de texto. Tenemos que recopilar los esquemas de nuestro interés:
SELECT nspname
FROM pg_namespace;
Puede agregar una WHERE
cláusula si desea limitar el alcance. Copie el resultado y modifíquelo, para obtener una serie de GRANT USAGE ON SCHEMA ... TO your_role;
comandos. Luego solo alimente psql
, por ejemplo:
psql -f multigrant.sql
Una variante habitual de esto podría ser un script de shell que recorra los nombres y llamadas recopilados psql
, pasando la GRANT
declaración construida a la -c
opción.
La otra solución hace básicamente lo mismo en un bloque pl / pgsql, construyendo una consulta dinámica. El núcleo es el mismo: tenemos que recopilar los esquemas. Luego recorremos todos ellos, otorgando el esquema de permisos por esquema:
DO $do$
DECLARE
sch text;
BEGIN
FOR sch IN SELECT nspname FROM pg_namespace
LOOP
EXECUTE format($$ GRANT USAGE ON SCHEMA %I TO your_role $$, sch);
END LOOP;
END;
$do$;
Notas :
- a diferencia de las tablas, secuencias, funciones y tipos, no se pueden establecer privilegios predeterminados para los esquemas (a partir de 9.4). Deberá otorgar este privilegio para cualquier esquema recién agregado manualmente.
- Aquí estoy usando la cotización en dólares al construir la consulta dinámica. Esto me permite usar la sintaxis 'normal', en lugar de multiplicar comillas simples, por ejemplo (no presente en este ejemplo). De esta manera, la mayoría de los editores destacarán las declaraciones muy bien.
- También lo uso
format()
con el %I
especificador de formato para tener el nombre del objeto correctamente citado si es necesario. Este enfoque es mucho más legible que construir la consulta con concatenación de constantes de cadena y algunas quote_ident()
llamadas.
pg_namespace
se puede encontrar en el pg_catalog
esquema. Echa un vistazo a los otros objetos allí: almacenan todos los aspectos de tus esquemas, tablas, etc.
grant usage
el nuevo esquema.