在之前的例子中,我们使用sql函数来实现了一个简单的插件开发,但是在实际应用中,我们开发插件基本都是使用C函数,其效率要远远高得多。
下面我们使用C函数来创建一个简单的插件,用来实现16进制的转换。
例子:
1、创建控制文件
在contrib目录下一个base16_encode文件夹,在该文件夹下面创建base16.control文件,内容如下:
# base16 extension
comment = 'base16 datatype auth by bill'
default_version = '0.0.1'
relocatable = true
2、创建Makefile文件
其中MODULES参数指是我们要创建的c函数文件。https://www.cndba.cn/foucus/article/3934
EXTENSION = base16 # the extensions name
DATA = base16--0.0.1.sql # script files to install
REGRESS = base16_test # our test script file (without extension)
MODULES = base16 # our c module file to build
# postgres build stuff
PG_CONFIG = pg_config
PGXS := $(shell $(PG_CONFIG) --pgxs)
include $(PGXS)
3、创建sql文件
因为我们的功能C函数中实现,所以这里创建language是C的函数。
-- complain if script is sourced in psql, rather than via CREATE EXTENSION
/echo Use "CREATE EXTENSION base16" to load this file. /quit
CREATE FUNCTION base16_encode(integer) RETURNS text
AS '$libdir/base16'
LANGUAGE C IMMUTABLE STRICT;
4、创建C函数
接着我们要创建C函数来实现