Postgresql
PostgreSQL GRANT ALL 使用 LIKE 在多個表上
我有 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
和字元串連接。