c函数 postgres_C-语言函数

本文详细介绍了如何在PostgreSQL中使用C语言编写返回集合(多行)的函数,涉及到FuncCallContext结构、SRF(Set Returning Functions)的使用方法,包括初始化、返回数据、结束函数等关键步骤,并提供了伪代码示例。
摘要由CSDN通过智能技术生成

还有一个特殊的API用于提供从C语言函数中返回集合(多行)。

一个返回集合的函数必须遵循版本-1的调用方式。

同样,源代码必须包含funcapi.h,就像上面说的那样。

一个返回集合的函数(SRF)通常为它返回的每个项都调用一次。

因此SRF必须保存足够的状态用于记住它正在做的事情以及在每次调用的时候返回下一个项。

表函数 API 提供了FuncCallContext结构用于帮助控制这个过程。

fcinfo->flinfo->fn_extra

用于保存一个跨越多次调用的指向FuncCallContext的指针。typedef struct

{

/*

* 前面已经被调用的次数

* 初始的时候,call_cntr 被 SRF_FIRSTCALL_INIT() 置为 0,

*并且每次你调用 SRF_RETURN_NEXT() 的时候都递增

*/

uint32 call_cntr;

/*

* 可选的最大调用数量

* 这里的 max_calls 只是为了方便,设置它也是可选的。

* 如果没有设置,你必须提供可选的方法来知道函数何时结束。

*/

uint32 max_calls;

/*

* 指向结果槽位的可选指针

* 这个数据类型已经过时,只用于向下兼容。也就是那些使用已废弃的TupleDescGetSlot()的用户定义 SRF

*/

TupleTableSlot *slot;

/*

* 可选的指向用户提供的杂项环境信息的指针

* user_fctx 用做一个指向你自己的结构的指针,包含任意提供给你的函数的调用间的环境信息

*/

void *user_fctx;

/*

* 可选的指向包含属性类型输入元信息的结构数组的指针

* attinmeta 用于在返回行的时候(也就是说返回复合数据类型)

* 在只返回基本(也就是标量)数据类型的时候并不需要。

* 只有在你准备用 BuildTupleFromCStrings() 创建返回行的时候才需要它。

*/

AttInMetadata *attinmeta;

/*

* 用于必须在多次调用间存活的结构的内存环境

* multi_call_memory_ctx 是由 SRF_FIRSTCALL_INIT() 为你设置的,并且由 SRF_R

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值