1 什么是spi?
spi是一个可以内部执行sql语句的接口函数,即你可以在代码内部执行一些sql。
其接口函数以及相关类型,定义在spi.h文件中
2如何使用spi?什么场景使用?
例子:
char * sql="select * from table";// 定义你想执行的语句
ret =SPI_execute(rSql, true, 0);//启动spi链接
proc = SPI_processed;
if ((ret == SPI_OK_SELECT) && (proc > 0)) {
SPITupleTable *tuptable = SPI_tuptable;
TupleDesc spi_tupdesc = tuptable->tupdesc;//获取表元组
uint64 i;
for (i = 0; i < proc; i++) {
char *proname;
char *type;
char *definer;
HeapTuple spi_tuple;
/* get the next sql result tuple */
spi_tuple = tuptable->vals[i];//获取值
HeapTuple utup;
char *rolename;
/* get the current key (might be NULL) */
//代表你获取到的第i个元组的第1列的值。
value= SPI_getvalue(spi_tuple, spi_tupdesc, 1);
value2= SPI_getvalue(spi_tuple, spi_tupdesc, 2);//第二列 就是2 以此类推
}
}
使用场景:
一般在写一些函数或者非内核级调用的时候 可以使用。因为该方法比较简单粗暴,不建议在内核级使用,会降低效率。 如果需要从表获取值可以直接用OID访问。