DO执行一段匿名代码块, 换句话说,在程序语言过程中一次性执行的匿名函数。
代码块被看做是没有参数的一段函数体,返回值类型是void。它的解析和执行时同一时刻发生的。
可选属性LANGUAGE可以在代码块之前写,也可以写在代码块的后面。
程序语言代码可以被执行的。程序语言必须指定为字符串才行, 就像命令CREATE FUNCTION,推荐使用美元符号一样。
用来解析代码的程序语言的名字,如果缺省,默认的语言是plpgsql。
程序语言在使用之前,必须通过命令CREATE LANGUAGE安装到当前的数据库中。 plpgsql是默认的安装语言,其它语言安装时必须指定。
如果语言是不受信任的,用户必须有使用程序语言的USAGE权限,或者是超级用户。 在语言上,这同创建一个函数是一样的权限要求。
授予角色webuser对模式public下视图的所有操作权限:
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$$;