PostgreSQL用C完成預存程序執行個體

來源:互聯網
上載者:User

PostgreSQL用C完成預存程序執行個體

最近給客戶寫了一個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

------------------------------------華麗麗的分割線------------------------------------

CentOS 6.3環境下yum安裝PostgreSQL 9.3

PostgreSQL緩衝詳述

Windows平台編譯 PostgreSQL

Ubuntu下LAPP(Linux+Apache+PostgreSQL+PHP)環境的配置與安裝

Ubuntu上的phppgAdmin安裝及配置

CentOS平台下安裝PostgreSQL9.3

PostgreSQL配置Streaming Replication叢集

如何在CentOS 7/6.5/6.4 下安裝PostgreSQL 9.3 與 phpPgAdmin 

------------------------------------華麗麗的分割線------------------------------------

PostgreSQL 的詳細介紹:請點這裡
PostgreSQL 的:請點這裡

本文永久更新連結地址:

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.