安装外部表协议

安装外部表协议

要使用例子中的外部表协议,用户需要用C编译器cc来编译和链接源代码,创建出一个能被Greenplum数据库动态载入的共享对象。在Linux系统上编译和链接该源代码的命令看起来与此类似:

cc -fpic -c gpextprotocal.c cc -shared -o gpextprotocal.so gpextprotocal.o

选项-fpic指定创建位置无关代码(PIC),-c选项只编译而不链接源代码并且创建一个对象文件。该对象文件需要被创建为位置无关代码(PIC),这样Greenplum数据库才能把它载入到内存中的任意位置。

标志-shared指定创建一个共享对象(共享库),-o选项指定该共享对象文件的名称为gpextprotocal.so。更多有关cc选项的信息请参考GCC手册。

gpextprotocal.c中声明为包括文件的头文件位于$GPHOME/include/postgresql/的子目录中。

更多有关编译及链接动态载入函数的例子和在其他操作系统上编译C源代码创建共享库的例子,请见 https://www.postgresql.org/docs/8.4/static/xfunc-c.html#DFUNC 上的Postgres文档。

用户操作系统上的C编译器cc以及链接编辑器ld的手册页也包含有关在该系统上编译和链接源代码的信息。

自定义协议的已编译代码(共享对象文件)在用户的Greenplum数据库阵列中每一个主机(Master和所有的Segment)上必须被放置在相同的位置。这个位置还必须在LD_LIBRARY_PATH中,这样服务器才能定位该文件。推荐在Greenplum数据库阵列的所有Master和Segment实例上都将共享文件放置在相对于$libdir(位于$GPHOME/lib)的位置或者动态库路径(由dynamic_library_path服务器配置参数设置)中的位置。用户可以使用Greenplum数据库工具gpsshgpscp来更新Segment。