gpt4 book ai didi

sql - 在 postgres 中实现用户定义的 c 函数

转载 作者:行者123 更新时间:2023-11-30 15:32:52 26 4
gpt4 key购买 nike

我正在尝试在 PostgreSQL 中用 C 创建自定义函数。

该函数应该接受一个表作为参数,并在访问传入的表中的数据后返回一个表作为输出。

我见过的例子都涉及传入整数和其他基本类型。我的请求可以在 PostgreSQL 中实现吗?我该如何去做呢?

最佳答案

是的,这是可能的。

输出端很简单,您只需使用 RETURNS TABLE (...)RETURNS SETOF record,具体取决于结果集是否具有动态列。源代码中有很多示例,文档中有一些 IIRC。

输入端不太简单。您需要将refcursor传递给函数,传递表架构和名称,或者传递regclass oid,它是pg_class中表的ID 。选择哪个取决于您需要如何使用该功能。如果您希望它能够使用另一个函数的输出,那么只有引用游标可用。如果您不需要(或者不介意通过临时表执行此操作),则使用 regclass oid 会更方便,因为您不必为表创建游标并将光标传递给函数,只需直接传递表名或 oid 即可。

PostgreSQL 中的一些函数将表读取为 regclass 并处理它们。源代码中的 table_to_xml 函数是执行此操作的一个很好的起点。

您不太可能找到很多关于如何获取引用并处理它的示例。最好的起点是 PostgreSQL 源代码。 cursor_to_xmlcursor_to_xmlschema 函数使用引用游标。

这些函数都在src/backend/utils/adt/xml.c中定义。您可以看到,table_to_xml 版本仅执行 select * from the_table 并将光标传递给 query_to_xml_internal 进行处理。这展示了如何读取和使用行。

关于sql - 在 postgres 中实现用户定义的 c 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23959709/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com