↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
测试与开发版本: 19 / devel
不受支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2 / 7.1 / 7.0 / 6.5 / 6.4
历史版本PostgreSQL 6.4 已于 2003 年 10 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本。

第 49 章 过程语言

从 6.3 版发布开始, Postgres 支持 定义过程语言。 对于用过程语言定义的函数或触发器过程,数据库 并不内置关于如何解释函数源文本的知识。相反,调用会被传递给 一个了解该语言细节的调用处理器。 调用处理器本身是一个特殊的编程语言函数, 被编译进共享对象 并按需装载。

49.1. 安装过程语言

过程语言的安装

在数据库中安装过程语言需要三个步骤。

  1. 该语言调用处理器的共享对象 必须编译并安装。默认情况下, PL/pgSQL 的调用处理器会被构建并安装到 数据库库目录中。如果配置了 Tcl/Tk 支持,PL/Tcl 的调用处理器也会被构建 并安装到同一位置。

    编写新过程语言(PL)的调用处理器 超出了本手册的范围。

  2. 处理器必须用命令

        CREATE FUNCTION handler_function_name () RETURNS OPAQUE AS
            'path-to-shared-object' LANGUAGE 'C';
                    
    

    声明。特殊的返回类型 OPAQUE 告诉 数据库,这个函数不返回任何已定义的 基本类型或组合类型,不能直接在 SQL 语句中使用。

  3. PL 必须用命令

        CREATE [ TRUSTED ] PROCEDURAL LANGUAGE 'language-name'
            HANDLER handler_function_name
            LANCOMPILER 'description';
                    
    

    声明。可选关键字 TRUSTED 指明 没有超级用户权限的普通数据库 用户能否使用这种语言创建函数 和触发器过程。由于 PL 函数在 数据库后端内部执行,它只应用于 不会访问数据库后端 内部结构或文件系统的语言。PL/pgSQL 和 PL/Tcl 语言已知是可信的。

示例

  1. 下面的命令告诉数据库到哪里查找 PL/pgSQL 语言调用处理器函数的共享对象:

        CREATE FUNCTION plpgsql_call_handler () RETURNS OPAQUE AS
            '/usr/local/pgsql/lib/plpgsql.so' LANGUAGE 'C';
        
    
  2. 而命令

        CREATE TRUSTED PROCEDURAL LANGUAGE 'plpgsql'
            HANDLER plpgsql_call_handler
            LANCOMPILER 'PL/pgSQL';
        
    

    则定义对于语言属性为 'plpgsql' 的函数和触发器过 程,将调用先前声明的调用处理器 函数。

    PL 调用处理器函数有一个与普通 C 语言函数不同的 特殊调用接口。传给 调用处理器的参数之一是要执行的函数在 pg_proc 表条目中的对象 ID。 调用处理器会检查各种系统目录来分析 函数的调用参数及其返回数据类型。函数 主体的源文本位于 pg_proc 的 prosrc 属性中。 因此,与 C 语言函数不同,PL 函数 可以像 SQL 语言函数一样被重载。只要调用参数不同,就可以有 多个同名的不同 PL 函数。

    在 template1 数据库中定义的过程语言会自动在随后创建的所有 数据库中定义。因此数据库管理员可以决定默认 提供哪些语言。

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。