设为首页 加入收藏

TOP

PostgreSQL用C完成存储过程实例
2015-12-01 16:02:58 来源: 作者: 【 】 浏览:7
Tags:PostgreSQL 完成 存储 过程 实例

最近给客户写了一个PostgreSQL用C写的存储过程的例子,在此记录一下。


目的:用C完成一个存储过程例子,存储过程实现对表某一段进行update。


准备工作


1、安装数据库


2、建立表test


highgo=# create table test(id int, name text, label int);
CREATE TABLE


3、建立C文件,C代码如下:


#include "postgres.h"
#include "executor/spi.h"
#include "utils/builtins.h"
?
#ifdef PG_MODULE_MAGIC
PG_MODULE_MAGIC;
#endif
?
int mydelete(int key);
?
int
mydelete(int key)
{
? ? char command[128];? //视命令长短建立相应大小的数组
? ? int ret;
? ? int proc;? ? ? ? ? ? ? ? ? ? ? //对表数据操作的行数
?
? ? /* 将命令赋值到command */
? ? sprintf(command, "update test set label = 0 where id = %d and label = 1; ", key);
?
? ? SPI_connect();? ? ? ? ? ? //内部链接
? ? ret = SPI_exec( command, 0);? //执行操作
? ? proc = SPI_processed;? ? ? //为行数赋值
? ? SPI_finish();? ? ? ? ? ? ? ? //中断连接
? ? return (proc);? ? ? ? ? ? ? //将操作行数作为返回结果
}


数据库api参考文档:http://www.postgresql.org/docs/9.4/static/spi.html


编译到安装


4、gcc编译


gcc -fpic -I/opt/HighGo/db/20150401/include/postgresql/server/ -shared -o myapi.so myapi.c


5、复制到lib目录下


cp myapi.so /opt/HighGo/db/20150401/lib/postgresql/


6、加载到服务器


highgo=# load 'myapi';
LOAD


7、建立函数


highgo=# create function mydele(integer) returns integer as '$libdir/myapi.so','mydelete' language c strict;
CREATE FUNCTION
highgo=#


8、效果


highgo=# insert into test values (1,'jim',1);
INSERT 0 1
highgo=# insert into test values (2,'tom',1);
INSERT 0 1
highgo=# select * from test;
?id | name | label
----+------+-------
? 1 | jim? |? ? 1
? 2 | tom? |? ? 1
?
highgo=# select mydele(1);
?mydele
--------
? ? ? 1
(1 row)
highgo=# select * from test;
?id | name | label
----+------+-------
? 2 | tom? |? ? 1
? 1 | jim? |? ? 0


------------------------------------华丽丽的分割线------------------------------------


------------------------------------华丽丽的分割线------------------------------------


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Postgres-X2部署步骤 下一篇PostgreSQL-XL安装部署

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: