基于C语言和利用visual studio 2017 开发postgre-extension 的一波操作【实际体验了酸爽之后的分享】

写在前面:因为科研需要,需要使用vs来开发一个postgre-extension,查了很多了资料,翻遍了postgresql的官方文档,只了解到有关开发extension 的一些C语言相关知识,不过对于具体操作细节还是知之甚少,后来通过参考大神的博文,和很多次心累的尝试之后,终于实现了一个小的demo,现在分享出来给有需要的童鞋们,希望可以避免大家走太多的弯路。

环境准备 : visual studio 2017, C/C++开发环境(VS自带即可),postgresql 9.6, navicat(psql也可)。

实现目标 : 开发一个pg-extension,其功能是可以查看本机的主机名称

开发过程

  1. vs2017配置
    新建一个C++项目,并设置属性。不管是release 或者 debug,全部设置为:
    在这里插入图片描述
    设置动态库:
    在这里插入图片描述
    设置包含目录:主要包含一些头文件和API代码:
    在这里插入图片描述
    点击应用即可。

设置附加库目录:
在这里插入图片描述
附加依赖项
在这里插入图片描述

  1. 代码编写
    项目名称为:pg_kmcb,添加一个C文件为:pg_function.c
    在这里插入图片描述
    其内容为:
#include <stdio.h>
#include "postgres.h"
#include "fmgr.h"


#ifdef PG_MODULE_MAGIC
PG_MODULE_MAGIC;
#endif

/*获取主机名函数*/
PGDLLEXPORT Datum hostname(PG_FUNCTION_ARGS);

PG_FUNCTION_INFO_V1(hostname);



/*获取主机名*/
Datum hostname(PG_FUNCTION_ARGS) {
	text *result;
	size_t len;
	char buf[1024 + sizeof(char)];

	gethostname(buf, 1024);
	len = strlen(buf);
	elog(NOTICE, "hostname=%s\n", buf);
	result = (text *)palloc(len + VARHDRSZ);
	SET_VARSIZE(result, len + VARHDRSZ);
	memcpy(VARDATA(result), buf, len);
	PG_RETURN_TEXT_P(PointerGetDatum(result));
}

新建一个comtrol文件:
在这里插入图片描述
(红色框里卖弄的路径为编译好的dll文件路径)

新建一个sql文件:
在这里插入图片描述
用于在pg中创建函数hostname.

  1. 编译并操作
    编译。
    停止postgresql。
    然后将生成的pg_kmcb.dll 文件:2017C++\x64\Release\pg_kmcb.dll 复制到\pgsql\lib中;
    将2017C++\pg_kmcb\pg_kmcb.control文件复制到 \pgsql\share\extension\中;
    将\2017C++\pg_kmcb\pg_kmcb–1.0.sql文件复制到 \pgsql\share\extension\中。

  2. 数据库操作
    第一次使用要在需要的数据库中创建扩展,以后除非新加函数,否则不需要再次创建扩展.
    在命令行中或者navicat中新建查询:输入语句:
    drop extension if exists pg_kmcb;
    create extension pg_kmcb;

在这里插入图片描述

  1. 结果展示
    创建extension之后,就可以使用刚刚创建的函数,运行结果如下:
    在这里插入图片描述
    便可以查出主机名称!

到这里,第一步就打通了!加油!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小吴同学GOGOGO

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值