我正在尝试编写一个 PostgreSQL 函数并存储一个 ArrayType *state,每次我调用该函数时都需要更改它。每次调用函数时,我是否需要在 construct_array 中使用单独的 Datum 数组,或者我是否可以直接更改状态中的值(即 state[i] = 10)?
谢谢!
最佳答案
我建议你不要直接修改一个ArrayType
。
因为它是一个varlena
,你必须repalloc
它并在添加或删除元素时改变值并维护varlena
header 和 NULL 位图。您必须使用 dataoffset
并遍历元素。
要么将你的状态保存在一个普通的 C 数组中,并在你需要一个 ArrayType
时使用 construct_array
(这可能更便宜而且更好),或者使用函数 array_get_element
、array_set_element
和 utils/array.h
中的其他对象,用于对 ArrayType
进行操作。
关于你能在 C 中编辑 Postgres ArrayType 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45289471/