如何获取 table 元组并将其转换为 C 中用于 postgres 的数组?

How can I get table tuple and transform it into an array in C for postgres?

我正在按照 Postgres 文档 https://www.postgresql.org/docs/8.2/xfunc-c.html 编写 C 函数和创建扩展(用于层次聚类),但我很困惑。

  1. 所以我可以使用HeapTupleHeader t = PG_GETARG_HEAPTUPLEHEADER(0);
  2. 得到一个元组
  3. 如何获取此元组中的属性值?我们有 GET_ARGUMENT_BY_NUM,我可以为每一列获取一个值并将其放入数组吗? (出于某种原因,我想从 table 获取数据,例如,将其聚类)。
  4. 有一个使用特定 table 函数的示例 (emp table)。如何为我的函数使用随机 table(我找不到示例)?
  5. c_overpaid(emp, limit)(在文档中)是否为 emp table 调用了一次,或者它被调用的次数与 table 中的行一样多?
  6. 对于层次聚类:我可以从 postgres 获取 table 数据,将其写入临时文件,读取该文件,将其放入数组,对其进行聚类并将结果放入数据库吗? (比如创建或更改 table 并进行分区?像这样:集线器 - 是整个 table,part_1 是一个集群,part_2 是第二个集群等)

你应该阅读 the documentation for the current version

  1. 是。

  2. 如例子所示,有GetAttributeByName,但也有GetAttributeByNum的功能。我假设您在谈论 C 数组而不是 PostgreSQL 数组。当然,如果它们具有相同的数据类型,您可以将所有值填充到一个数组中。

  3. 那么你就必须使用特殊类型record。有关代码示例,请查看 src/backend/utils/adt/json.c.

    中的函数 record_to_jsoncomposite_to_json
  4. 为找到的每一行调用它,因为它出现在 SELECT 列表中。

  5. 这有点含糊,但可以肯定。不过,我不明白您为什么要从 table 中提取它。为什么不编写自己的 table 访问方法,因为看起来您想定义一种新的存储方式 tables.

    但请注意,这绝对不是一件小事,您最好先尝试了解更多平凡的东西。