PostgreSQL用C完成存储过程例子
博客专区 > PGSmith 的博客 > 博客详情
PostgreSQL用C完成存储过程例子
PGSmith 发表于3年前
PostgreSQL用C完成存储过程例子
  • 发表于 3年前
  • 阅读 2771
  • 收藏 70
  • 点赞 3
  • 评论 11

标题:腾讯云 新注册用户域名抢购1元起>>>   

摘要: 最近给客户写了一个PG用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


共有 人打赏支持
PGSmith
粉丝 82
博文 52
码字总数 59161
评论 (11)
codein
I
Raynor1
OH
有理想的猪
太简陋啦 13
红薯

引用来自“权宗亮”的评论

太简陋啦 13

入门级,挺好的
有理想的猪

引用来自“红薯”的评论

引用来自“权宗亮”的评论

太简陋啦 13

入门级,挺好的
他是王硕, 本来能写更完整更好看的
kenyon_君羊
neo-chen
不错 MySQL 的写了很多,PG的还没有写过,看过这个例子豁然开朗。
22too
真厉害
liudng
下一个项目, 准备上pgsql
francs
酷!
Xtay
4
×
PGSmith
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: