c - 如何获取表元组并将其转换为 C 中的数组以用于 postgres?
问题描述
我正在关注 Postgres 文档https://www.postgresql.org/docs/8.2/xfunc-c.html来编写 C 函数并创建扩展(用于层次聚类),我很困惑。
- 所以我可以通过使用得到一个元组
HeapTupleHeader t = PG_GETARG_HEAPTUPLEHEADER(0);
- 如何获取此元组中的属性值?我们有
GET_ARGUMENT_BY_NUM
,我可以为每一列获取一个值并将其放入一个数组中吗?(出于某种原因,我想从表中获取数据,例如,将其聚类)。 - 有一个使用特定表作为函数的示例(emp 表)。如何为我的函数使用随机表(我找不到示例)?
- (在文档中)是
c_overpaid(emp, limit)
为 emp 表调用一次,还是与表中的行一样多地调用它? - 对于层次聚类:我可以从 postgres 获取表数据,将其写入临时文件,读取该文件,将其放入数组,对其进行聚类并将结果放入数据库吗?(比如创建或更改表并进行分区?像这样:集线器 - 是整个表,part_1 是一个集群,part_2 是第二个集群,等等)
解决方案
您应该阅读当前版本的文档。
是的。
如示例所示,with
GetAttributeByName
, 但也有一个GetAttributeByNum
函数。我假设您在谈论 C 数组而不是 PostgreSQL 数组。当然,如果它们具有相同的数据类型,您可以将所有值填充到一个数组中。那么你将不得不使用特殊类型
record
。有关代码示例,请查看函数record_to_json
和composite_to_json
.src/backend/utils/adt/json.c
为找到的每一行调用它,因为它出现在
SELECT
列表中。这有点模糊,但可以肯定。我不明白你为什么要从表中提取它。为什么不编写自己的表访问方法,因为看起来您想定义一种存储表的新方法。
但请注意,这绝对不是微不足道的,你最好先用更平凡的东西弄湿你的脚。
推荐阅读
- java - 如何在不使用解析或自动转换的情况下将十六进制数转换为二进制
- java - 用Java解析JSON双括号
- python - 如何将 python 字符串数组转换为 POINTER(c_void_p)
- list - 列表视图中一次仅显示一项
- javascript - 在 iframe 中创建自定义元素
- javascript - 如何将两个json数组与object.assign结合起来
- python - 为什么pyqt5中的QPushButton很慢?
- bash - 如何在 tmux 中获取当前窗格下方的窗格索引?
- bash - 在 bash 中使用 While 循环读取一行时,它会将多个空间压缩为一个
- json - React - 将 JSON 呈现为 UI 对象并允许任何用户更改这些 UI 对象以更新 JSON