DO
DO — 执行一个匿名代码块
大纲
DO [ LANGUAGElang_name
]code
复制
描述
DO
执行一个匿名代码块,或者换句话说
执行一个以一种过程语言编写的瞬时匿名函数。
代码块就好像是一个没有参数并且返回void
的函数的函数体。
它会被在一次时间内解析并且执行。
可选的LANGUAGE
子句可以卸载代码块之前或者之后。
参数
code
要被执行的过程语言代码。就像在
CREATE FUNCTION
中一样,必须把它指定为一个 字符串。推荐使用一个美元引用的文本。lang_name
编写该代码的过程语言的名称。如果省略,默认为
plpgsql
。
注解
要使用的过程语言必须已经用CREATE EXTENSION
安装在
当前数据库中。默认已经安装了plpgsql
,但是其他语言没有被
安装。
用户必须拥有该过程语言的USAGE
特权,如果该语言
是不可信的则必须是一个超级用户。这和创建一个该语言的函数对
特权的要求相同。
如果在事务块中执行DO
,过程代码则无法执行事务控制语句。只有在自己的事务中执行DO
时,才允许使用事务控制语句。
例子
把模式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$$;复制
兼容性
SQL 标准中没有DO
语句。
文章转载自PostgreSQL全球开发组,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
王炸!OGG 23ai 终于支持从PostgreSQL备库抽取数据了
曹海峰
401次阅读
2025-03-09 12:54:06
玩一玩系列——玩玩login_hook(一款即将停止维护的PostgreSQL登录插件)
小满未满、
375次阅读
2025-03-08 18:19:28
明明想执行的SQL是DELETE、UPDATE,但为什么看到的是SELECT(FDW的实现原理解析)
小满未满、
352次阅读
2025-03-19 23:11:26
PostgreSQL初/中/高级认证考试(3.15)通过考生公示
开源软件联盟PostgreSQL分会
304次阅读
2025-03-20 09:50:36
IvorySQL 4.4 发布 - 基于 PostgreSQL 17.4,增强平台支持
通讯员
198次阅读
2025-03-20 15:31:04
套壳论
梧桐
188次阅读
2025-03-09 10:58:17
命名不规范,事后泪两行
xiongcc
178次阅读
2025-03-13 14:26:08
PG vs MySQL 执行计划解读的异同点
进击的CJR
122次阅读
2025-03-21 10:50:08
版本发布| IvorySQL 4.4 发布
IvorySQL开源数据库社区
115次阅读
2025-03-13 09:52:33
宝藏PEV,助力你成为SQL优化高手
xiongcc
113次阅读
2025-03-09 23:34:23