DO执行一个匿名代码块, 或者换句话说是一个程序语言的顺便匿名函数。
代码块被视为不带参数的函数体,返回void。解析并执行一个单独的时间。
可以在代码块之前或者之后写可选的LANGUAGE子句。
将被执行的程序语言代码。这必须被指定为一个字符串符,仅如在CREATE FUNCTION中。 建议使用美元符。
写代码使用的程序语言的名称。若省略,默认为plpgsql。
要被使用的程序语言必须是已经通过CREATE LANGUAGE被安装到当前数据库中。 plpgsql是么人安装的,而其他语言并不是。
用户必须对程序语言由USAGE权限,或者若语言是不可信的就必须是超级用户。 这与用该语言创建函数的权限要求相同。
将public 模式下的所有视图的所有权限授予webuser角色:
DO $$DECLARE r record; BEGIN FOR r IN SELECT table_schema, table_name FROM information_schema.tables WHERE table_type = 'VIEW' AND table_schema = 'public' LOOP EXECUTE 'GRANT ALL ON ' || quote_ident(r.table_schema) || '.' || quote_ident(r.table_name) || ' TO webuser'; END LOOP; END$$;