PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как да ПРЕДОСТАВЯ ВСИЧКИ ПРИВИЛЕГИИ на ВСИЧКИ ИЗГЛЕДИ в едно изявление?

Единственият начин да направите това в един израз (вид) е да създадете функция, в противен случай или изрично изброявате всички изгледи, или предоставяте на всички таблици, след което отменяте не-изгледи.

Написах това набързо, но го тествах. Може да се наложи да промените според нуждите:

CREATE OR REPLACE FUNCTION fn_grant_all_views(schema_name TEXT, role_name TEXT)
RETURNS VOID AS $func$

DECLARE view_name TEXT;

BEGIN

  FOR view_name IN
    SELECT viewname FROM pg_views WHERE schemaname = schema_name
  LOOP
    EXECUTE 'GRANT ALL PRIVILEGES ON ' || schema_name || '.' || view_name || ' TO ' || role_name || ';';
  END LOOP;

END; $func$ LANGUAGE PLPGSQL

Употреба:

SELECT fn_grant_all_views('my_schema','my_role');


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Тригер за актуализиране на PostgreSQL

  2. Как да увеличите максималния брой връзки в PostgreSQL

  3. Създаване на Gin индекс с триграма (gin_trgm_ops) в Django модел

  4. Как to_date() работи в PostgreSQL

  5. какъв е добър начин за хоризонтален шард в postgresql