云数据库 GAUSSDB-C语言函数(实验室特性):创建C函数

时间:2024-01-23 20:09:06

创建C函数

以ISNUMBER为例:

1
2
3
4
create or replace function isnumber(text)
returns integer
as '...../isNumber.so', 'ISNUMBER'
language c strict fenced IMMUTABLE SHIIPABLE;
  • ...../isNumber.so 指定了库文件的路径。当enable_default_cfunc_libpath打开时,只需要指定文件名即可,数据库会自动在默认目录($libdir/proc_srclib)下查找该文件。当enable_default_cfunc_libpath关闭时,这里必须指定库文件的绝对路径。enable_default_cfunc_libpath参数默认打开。
  • 属性strict,表示只要其中任意参数为NULL值,该函数就会返回空值,当有NULL参数时该函数不会被执行,而是自动返回一个空值结果。也就是说,如果函数创建时没有指定strict属性,则函数的C语言实现一定要对参数是否为NULL特殊处理,例如:maxdate的实现。否则,对NULL的不正确的使用可能引起进程的crash。
  • 属性fenced,如果指定函数为fenced模式,则函数会在worker进程中被调用,防止C代码实现错误导致服务器crash,不建议使用not fenced模式。
  • 属性IMMUTABLE,表示函数的结果只倚赖于它的输入参数。
  • 属性SHIPPABLE,表示这个函数可以下推到DN执行。对于IMMUTABLE类型的函数,如果函数的返回值类型不是record,则可以下推到DN上执行。

    对于STABLE/VOLATILE类型的函数,仅当函数的属性是SHIPPABLE的时候,函数可以下推到DN执行。

函数属性在CREATE FUNCTION章节会有详细介绍。

support.huaweicloud.com/distributed-devg-v3-gaussdb/gaussdb-12-0699.html