如何获取 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 函数和创建扩展(用于层次聚类),但我很困惑。
- 所以我可以使用
HeapTupleHeader t = PG_GETARG_HEAPTUPLEHEADER(0);
得到一个元组
- 如何获取此元组中的属性值?我们有
GET_ARGUMENT_BY_NUM
,我可以为每一列获取一个值并将其放入数组吗? (出于某种原因,我想从 table 获取数据,例如,将其聚类)。
- 有一个使用特定 table 函数的示例 (emp table)。如何为我的函数使用随机 table(我找不到示例)?
c_overpaid(emp, limit)
(在文档中)是否为 emp table 调用了一次,或者它被调用的次数与 table 中的行一样多?
- 对于层次聚类:我可以从 postgres 获取 table 数据,将其写入临时文件,读取该文件,将其放入数组,对其进行聚类并将结果放入数据库吗? (比如创建或更改 table 并进行分区?像这样:集线器 - 是整个 table,part_1 是一个集群,part_2 是第二个集群等)
你应该阅读 the documentation for the current version。
是。
如例子所示,有GetAttributeByName
,但也有GetAttributeByNum
的功能。我假设您在谈论 C 数组而不是 PostgreSQL 数组。当然,如果它们具有相同的数据类型,您可以将所有值填充到一个数组中。
那么你就必须使用特殊类型record
。有关代码示例,请查看 src/backend/utils/adt/json.c
.
中的函数 record_to_json
和 composite_to_json
为找到的每一行调用它,因为它出现在 SELECT
列表中。
这有点含糊,但可以肯定。不过,我不明白您为什么要从 table 中提取它。为什么不编写自己的 table 访问方法,因为看起来您想定义一种新的存储方式 tables.
但请注意,这绝对不是一件小事,您最好先尝试了解更多平凡的东西。
我正在按照 Postgres 文档 https://www.postgresql.org/docs/8.2/xfunc-c.html 编写 C 函数和创建扩展(用于层次聚类),但我很困惑。
- 所以我可以使用
HeapTupleHeader t = PG_GETARG_HEAPTUPLEHEADER(0);
得到一个元组
- 如何获取此元组中的属性值?我们有
GET_ARGUMENT_BY_NUM
,我可以为每一列获取一个值并将其放入数组吗? (出于某种原因,我想从 table 获取数据,例如,将其聚类)。 - 有一个使用特定 table 函数的示例 (emp table)。如何为我的函数使用随机 table(我找不到示例)?
c_overpaid(emp, limit)
(在文档中)是否为 emp table 调用了一次,或者它被调用的次数与 table 中的行一样多?- 对于层次聚类:我可以从 postgres 获取 table 数据,将其写入临时文件,读取该文件,将其放入数组,对其进行聚类并将结果放入数据库吗? (比如创建或更改 table 并进行分区?像这样:集线器 - 是整个 table,part_1 是一个集群,part_2 是第二个集群等)
你应该阅读 the documentation for the current version。
是。
如例子所示,有
GetAttributeByName
,但也有GetAttributeByNum
的功能。我假设您在谈论 C 数组而不是 PostgreSQL 数组。当然,如果它们具有相同的数据类型,您可以将所有值填充到一个数组中。那么你就必须使用特殊类型
中的函数record
。有关代码示例,请查看src/backend/utils/adt/json.c
.record_to_json
和composite_to_json
为找到的每一行调用它,因为它出现在
SELECT
列表中。这有点含糊,但可以肯定。不过,我不明白您为什么要从 table 中提取它。为什么不编写自己的 table 访问方法,因为看起来您想定义一种新的存储方式 tables.
但请注意,这绝对不是一件小事,您最好先尝试了解更多平凡的东西。