第 10 章 PL/pgSQL - SQL 过程语言
目录
PL/pgSQL 是Postgres数据库系统的一个可装载过程语言。
这个软件包最初由 Jan Wieck 编写。
10.1. 概述
PL/pgSQL 的设计目标是创建一种可装载的过程语言,它
可以用来创建函数和触发器过程,
向SQL语言中增加控制结构,
能执行复杂的计算,
继承所有用户定义的类型、函数和操作符,
可以被定义为服务器所信任,
易于使用。
PL/pgSQL 调用处理器在后端第一次调用函数时解析函数的源文本并生成一棵内部二进制指令树。生成的字节码在调用处理器中通过函数的对象 ID 来标识。这确保了通过 DROP/CREATE 序列更改函数会立即生效,而不需要建立新的数据库连接。
对于函数中使用的所有表达式和SQL语句,PL/pgSQL 字节码解释器都会使用 SPI 管理器的 SPI_prepare() 和 SPI_saveplan() 函数创建一个预备好的执行计划。这是在该语句第一次在 PL/pgSQL 函数中被处理时完成的。因此,一个包含大量可能需要执行计划的条件语句的函数,只会准备和保存那些在数据库连接的整个生命期内真正被用到的计划。
除了用户定义类型的输入/输出转换和计算函数之外,凡是能用 C 语言函数定义的东西也都可以用 PL/pgSQL 完成。你可以创建复杂条件计算函数,之后用它们来定义操作符,或在函数索引中使用它们。