FreeBSD 12下用Clang开发 PostgreSQL v9.6.1 的 C 扩展

FreeBSD 12下用Clang开发 PostgreSQL v9.6.1 的 C 扩展,第1张

概述# FreeBSD 12下用Clang开发 PostgreSQL v9.6.1 的 C 扩展#作者:老农民#QQ: 46715422#Email: [email protected]#微信: ericliu_77root@FreeBSD:/soft # uname -a && clang --versionFreeBSD FreeBSD 12.0-CURRENT FreeBSD 1
# FreeBSD 12下用Clang开发 Postgresql v9.6.1 的 C 扩展#作者:老农民#QQ: 46715422#Email: [email protected]#微信: ericliu_77root@FreeBSD:/soft # uname -a && clang --versionFreeBSD FreeBSD 12.0-CURRENT FreeBSD 12.0-CURRENT #0 r308137: Mon Oct 31 20:28:04 UTC 2016     [email protected]:/usr/obj/usr/src/sys/GENERIC  i386FreeBSD clang version 3.8.0 (Tags/RELEASE_380/final 262564) (based on LLVM 3.8.0)Target: i386-unkNown-freebsd12.0Thread model: posixInstalledDir: /usr/binroot@FreeBSD:/soft # # 假设我的 Postgresql 安装在 /usr/local/pgsql# 创建用户 root,创建测试库 cext
su - postgres -c "/usr/local/pgsql/bin/createuser -h localhost -p 5432 -d -A -P -e root"su - postgres -c "/usr/local/pgsql/bin/createdb cext -O root -E UTF8"
root@FreeBSD:/soft # su - postgres -c "/usr/local/pgsql/bin/psql cext" psql (9.6.1)输入 "help" 来获取帮助信息.
cext=# create table tb_cext(ID int,name text,age int);CREATE tablecext=# insert into tb_cext cext-# (ID,name,age)cext-# values cext-# (1,'a',12),cext-# (2,'b',19),cext-# (3,'c',33),cext-# (4,'d',cext-# (5,'e',15),cext-# (6,'f',19);INSERT 0 6cext=# select * from tb_cext;  ID | name | age ----+------+-----  1 | a    |  12  2 | b    |  19  3 | c    |  33  4 | d    |  19  5 | e    |  15  6 | f    |  19(6 行记录)
# 在当前目录下建立C源文件,C代码如下:vi tb_cext.c
#include "postgres.h"#include "executor/spi.h"#include "utils/builtins.h"#ifdef PG_MODulE_MAGICPG_MODulE_MAGIC;#endifint extdelete(int key);intextdelete(int key){    char command[128];    int ret;    int proc;    sprintf(command,"delete from tb_cext where age = %d ; ",key);    SPI_connect();    ret = SPI_exec( command,0);    proc = SPI_processed;    SPI_finish();    return (proc);}
# 编译clang -fpic -I/usr/local/include/ -I/usr/local/pgsql/include/server/ -shared -o tb_cext.so tb_cext.c
# 将 tb_cext.so 复制到 /usr/local/pgsql/lib 下mv tb_cext.so /usr/local/pgsql/lib/
# 加载C扩展到服务器root@FreeBSD:/soft # su - postgres -c "/usr/local/pgsql/bin/psql cext"psql (9.6.1)输入 "help" 来获取帮助信息.cext=# load 'tb_cext';LOADcext=#
-- 创建函数 extdel()cext=# create function extdel(integer) returns integer as '/usr/local/pgsql/lib/tb_cext.so','extdelete' language c strict;CREATE FUNCTION-- 执行函数 extdel(),删除年龄等于19岁的cext=# select extdel(19); extdel --------      3(1 行记录)-- 执行后的结果集cext=# select * from tb_cext;  ID | name | age ----+------+-----  1 | a    |  12  3 | c    |  33  5 | e    |  15(3 行记录)

要买正宗新疆特产,微信扫下面二维码,加老农民咨询购买:

总结

以上是内存溢出为你收集整理的FreeBSD 12下用Clang开发 PostgreSQL v9.6.1 的 C 扩展全部内容,希望文章能够帮你解决FreeBSD 12下用Clang开发 PostgreSQL v9.6.1 的 C 扩展所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/1173849.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存