文档章节

PostgreSQL用C完成存储过程例子

PGSmith
 PGSmith
发布于 2015/04/27 14:01
字数 358
阅读 2898
收藏 71

目的:用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

PGSmith

粉丝 90
博文 55
码字总数 59804
作品 0
济南
后端工程师
加载中

评论(11)

Xtay
Xtay
4
francs
francs
酷!
liudng
liudng
下一个项目, 准备上pgsql
22too
22too
真厉害
netkiller-
netkiller-
不错 MySQL 的写了很多,PG的还没有写过,看过这个例子豁然开朗。
kenyon_君羊
kenyon_君羊
有理想的猪
有理想的猪

引用来自“红薯”的评论

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

太简陋啦 13

入门级,挺好的
他是王硕, 本来能写更完整更好看的
红薯
红薯

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

太简陋啦 13

入门级,挺好的
有理想的猪
有理想的猪
太简陋啦 13
Raynor1
Raynor1
OH
PostgreSQL函数如何返回数据集

以下主要介绍PostgreSQL函数/存储过程返回数据集,或者也叫结果集的示例。 背景: PostgreSQL里面没有存储过程,只有函数,其他数据库里的这两个对象在PG里都叫函数。 函数由函数头,体和语言...

kenyon_君羊
2013/02/07
0
14
PostgreSQL DBA快速入门(一) - 准备和部署

PostgreSQL DBA快速入门(一): 准备和部署 MySQL和PostgreSQL - 两大开源对象关系型数据库管理系统,每一个都有大量的粉丝。这么多年来,在PostgreSQL社区中MySQL一直被消遣:默认松散的SQL...

闻术苑
07/30
0
0
PostgreSQL安装详细步骤(windows)

PostgreSQL安装: 一、windows下安装过程 安装介质:postgresql-9.1.3-1-windows.exe(46M),安装过程非常简单,过程如下: 1、开始安装: 2、选择程序安装目录: 注:安装 PostgreSQL 的分...

引鸩怼孑
2015/04/21
0
1
PostgreSQL函数如何返回数据集

以下主要介绍PostgreSQL函数/存储过程返回数据集,或者也叫结果集的示例。 背景: PostgreSQL里面没有存储过程,只有函数,其他数据库里的这两个对象在PG里都叫函数。 函数由函数头,体和语言...

永远的java
2013/10/29
0
0
postgresql开发中可能有用的知识

postgresql手册 一、PostgreSQL中可以直接对时间进行加减运算: 查询系统当前时间: select now(); 或者 select currenttimestamp; SELECT now()::timestamp + '1 year'; --当前时间加1年 SE...

binhu
2014/08/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

ajax 提交返回map集合 获取不到值

后台java代码 @RequestMapping("/cameraList") @ResponseBody public Map<String, Object> cameraListForPage(@RequestParam(defaultValue = "1", value = "page") Integer page......

S三少S
9分钟前
0
0
TypeScrip最污的技术课-技术胖TypeScript图文视频教程

近日Node.js之父瑞安达尔(Ryan Dahl)发布新的开源项目 deno,从官方介绍来看,可以认为它是下一代 Node,使用 rust 语言代替 C++ 重新编写跨平台底层内核驱动,上层仍然使用 V8 引擎,最终...

JamesView
11分钟前
5
0
Es学习笔记

1.过滤排重聚合查询 筛选出某一个聚合值的个数统计。相当于mysql的distinct. 关键字:cardinality "aggs": { "2":{ "cardinality": { "field": "field" } ...

Gmupload
14分钟前
0
0
h5语义化标签

语义化HTML:用最恰当的HTML元素标签做恰当的事情。 优点: 提升可访问性; SEO; 结构清晰,利于维护; 通用容器:div——块级通用容器;span——短语内容无语义容器。 <title></title>:简...

莫西摩西
20分钟前
0
0
修改11g rac中 asm diskstring的发现路径

问题 : 如果我 们asm_disking以前是/dev/oracleasm/disks/* ,并且现在已经有磁盘组再用这个磁盘串了,那么,我们无法直接修改这个发现串为 ORCL:*,修改会报错,提示存在的磁盘无法使用新的...

tututu_jiang
22分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部