我试图编写一个PostgreSQL函数,并存储一个ArrayType*状态,每次调用该函数时都需要更改每次调用函数时是否需要一个单独的基准数组用于构造数组,或者是否可以直接更改状态值(即状态[I]=10)?
谢谢!
最佳答案
我建议您不要直接修改ArrayType
。
因为它是一个varlena
,所以每当添加或删除元素时,您必须repalloc
它并在值周围移动,并保持varlena
头和空位图您必须使用dataoffset
并遍历元素。
要么将您的状态保持在普通的C数组中,并在需要construct_array
时使用ArrayType
(这可能更便宜、更好),要么使用array_get_element
中的函数array_set_element
、utils/array.h
和其他函数对ArrayType
进行操作。