记得多年前我有一定编程经验后,开始接触postgresql内核开发时,实现了一些功能,但是却不知道怎么运行起来测试看看自己所写代码的效果,当时很捉急。。。本文将以最简单快速的方法,用几行代码在数据内核中加上一个可以看的见摸的着的小功能, 推开这扇通过内核的门。
学习编程第一课,往往是写一个helloworld程序, 对postgresql内核编程来说,我们也可以来一把helloworld。
打开pgsql工程,打开src\include\catalog\pg_proc.h,在里面增加两行代码:
DATA(insert OID = 9999 (helloworld PGNSP PGUID 12 1 0 0 0 f f f f t f i s 0 0 25 "" _null_ _null_ _null_ _null_ _null_ my_func _null_ _null_ _null_));
DESCR("helloworld");
增加位置为随意,比如说可放在 下面代码的后面,注意格式和上面保持一致。
DATA(insert OID = 3444
再打开 src\backend\utils\adt\pseudotypes.c 文件,在最后加上一个函数,如下:
Datum my_func(PG_FUNCTION_ARGS)
{
char *str = pstrdup("Hello ,Postgres World!");
PG_RETURN_TEXT_P(cstring_to_text(str));
}
OK,helloworld功能全部代码完成,下面就来看效果吧。
关闭visual stdio中的pgsql工程(可直接关vs),在vs2013 x64命令提示符中清理、编译、安装、重新初始化数据库,并启动数据库,再用psql连接数据库,这个步骤有点多,但没办法,内核已经变了,必须用最新编译的才行。具体来说在msvc路径下执行如下语句:
clean.bat
perl build.pl DEBUG
perl install e:\pgdb\
cd /d e:\pgdb\bin
initdb.exe -D ../data1
"pg_ctl" -D "../data1" -l logfile start
再另开一个cmd窗口,进入bin目录运行psql连接数据库
cd /d e:\pgdb\bin
psql -d postgres
注意,第一步的clean.bat一定要运行,防止之前编译的东西有影响,先清理。若对编译过程有疑问可再看下第一篇源码编译安装详细介绍。
通过psql连接上数据库后,执行如下语句: select helloworld(); 结果如下图所示,我们的helloworld已经成功嵌入内核中。
是不是很简单?当然可能有人心中有十万个为什么想问,别急,这是HelloWorld, 在后续的博文将持续介绍。