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

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.5 已于 2004 年 6 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本。

CREATE FUNCTION

CREATE FUNCTION — 定义一个新函数

大纲

CREATE FUNCTION name ( [ ftype [, ...] ] )
    RETURNS rtype
    AS definition
    LANGUAGE 'langname'
  

输入

name

要创建的函数的名称。

ftype

函数参数的数据类型。

rtype

返回数据类型。

definition

定义函数的字符串;其含义取决于语言。它可以是内部函数名、对象文件的路径、SQL 查询,或者过程语言中的文本。

langname

可以是 'C'、 'sql'、'internal', 或 'plname', 其中 'plname' 是一种已创建过程语言的名称。详见CREATE LANGUAGE。

输出

CREATE

如果命令成功完成,就返回这个结果。

描述

CREATE FUNCTION允许 Postgres用户向一个数据库注册一个函数。 随后,这个用户被视为该函数的拥有者。

注意

关于编写函数的更多信息,请参考 PostgreSQL Programmer's Guide 中关于函数的章节。

使用DROP FUNCTION 删除用户定义的函数。

Postgres允许函数"重载"; 也就是说,只要几个不同函数的参数类型不同,它们就可以使用同一个名称。但对 INTERNAL 和 C 语言函数,必须谨慎使用这一设施。

两个 INTERNAL 函数如果 C 名相同,会在链接时引发错误。要解决这个问题,可以给它们起不同的 C 名(例如,把参数类型用作 C 名的一部分),然后在CREATE FUNCTION的 AS 子句中指定这些名字。 如果 AS 子句留空则CREATE FUNCTION 假定函数的 C 名与 SQL 名相同。

对于动态载入的 C 函数,函数的 SQL 名必须与 C 函数名相同,因为 AS 子句用来给出包含 C 代码的对象文件的路径名。在这种情况下,最好不要尝试重载 SQL 函数名。装载与某个 internal 函数或另一个动态载入函数同名的 C 函数可能可行,也可能不行。在某些平台上,如果 C 函数名冲突,动态装载器可能会以各种有趣的方式搞砸装载。所以,即使它今天在你那里能工作,当你以后尝试在其他地方运行这段代码时,可能会后悔重载了名字。

用法

创建一个简单的 SQL 函数:

CREATE FUNCTION one() RETURNS int4
    AS 'SELECT 1 AS RESULT'
    LANGUAGE 'sql';
SELECT one() AS answer;

         answer 
     ------
     1
    
   

创建一个 C 函数,调用一个用户创建的共享库中的例程。这个特定的例程计算一个校验位,如果函数参数中的校验位正确就返回 TRUE。它用于 CHECK 约束中。

   CREATE FUNCTION ean_checkdigit(bpchar, bpchar) RETURNS bool
    AS '/usr1/proj/bray/sql/funcs.so' LANGUAGE 'c';
    
CREATE TABLE product (
    id        char(8) PRIMARY KEY,
    eanprefix char(8) CHECK (eanprefix ~ '[0-9]{2}-[0-9]{5}')
                      REFERENCES brandname(ean_prefix),
    eancode   char(6) CHECK (eancode ~ '[0-9]{6}'),
    CONSTRAINT ean    CHECK (ean_checkdigit(eanprefix, eancode))
);
   
  

缺陷

C 函数不能返回一组值。

兼容性

CREATE FUNCTION是 Postgres语言扩展。

SQL/PSM

注意

PSM 表示持久存储模块(Persistent Stored Modules)。它是一种过程语言,最初希望在 1996 年底之前 PSM 能被批准为官方标准。截至 1998 年中,这还没有发生,但希望 PSM 最终能成为一个标准。

SQL/PSM CREATE FUNCTION的语法如下:

CREATE FUNCTION name
    ( [ [ IN | OUT | INOUT ] etereable>eable> type [, ...] ] )
     RETURNS rtype
     LANGUAGE 'langname'
     ESPECIFIC routine
     SQL-statement
    

提交更正

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