Postgresql

PostgreSQL GRANT ALL 使用 LIKE 在多個表上

  • June 16, 2015

我有 100 多個名為 public.test_* 的表

我怎樣才能輕鬆地GRANT ALL一次訪問所有表的使用者測試?

我試過:

GRANT ALL ON TABLE public.test_* TO test;

但它不工作……

GRANT表標識符中不使用萬用字元。

您可以使用ON ALL TABLES IN SCHEMA,但這需要一個模式名稱。

如果你想用萬用字元模式表名做事情,你需要EXECUTE format(...)在一個DO塊中使用 PL/PgSQL 來循環information_schema.tables視圖。在 DBA.se 和 Stack Overflow 上查看許多相關答案,了解 PL/PgSQL 中的動態 DDL。

未經測試的粗略範例給您的想法:

DO
$$
DECLARE
   t record;
BEGIN
   FOR t IN 
   SELECT table_schema, table_name
   FROM information_schema.tables
   WHERE table_schema = 'public'
   AND table_name LIKE 'test\_%'
   LOOP
       EXECUTE format('GRANT ALL ON TABLE %I.%I TO test;', table_schema, table_name);
   END LOOP;
END;
$$ LANGUAGE plpgsql;

有關什麼%I意思,請參閱該format功能的參考。如果您沒有format功能,那麼您的 PostgreSQL 已經過時,您可能應該計劃升級;您可以同時使用quote_ident和字元串連接。

引用自:https://dba.stackexchange.com/questions/104172