我正在尝试编写PostgreSQL函数并存储一个ArrayType *状态,每次调用该函数时都需要更改。每次调用函数时,是否需要在construct_array中使用单独的Datum数组,或者我可以直接更改state中的值(即state [i] = 10)?
谢谢!
答案 0 :(得分:0)
我建议您不要直接修改ArrayType
。
由于它是varlena
,您必须repalloc
它,并在添加或删除元素时移动值,并维护varlena
标头和NULL位图。您必须使用dataoffset
并遍历元素。
将您的状态保存在普通的C数组中,并在需要construct_array
时使用ArrayType
(这可能更便宜,更好)或使用函数array_get_element
,{{1来自array_set_element
的其他人和utils/array.h
上的其他人。