Rob Nikander <rob.nikander@xxxxxxxxx> writes: > On Jun 18, 2019, at 7:37 PM, Alvaro Herrera <alvherre@xxxxxxxxxxxxxxx> wrote: >> On 2019-Jun-18, Rob Nikander wrote: >>> Does `array_append(arr, elt)` create a new array and copy everything? >>> In other words, is it O(n) or O(1)? […] >> Starting with 9.5, there's an optimization that I think is supposed to >> make it O(1): > Sweet! Thanks. Now I’d like to know how to tell if that optimization is being used, or not. Time it and see ;-) >From memory, the cases that should be fast now are * Assigning to an element of a plpgsql variable that is an array, ie "arrayvar[n] := newelement". * "arrayvar := arrayvar || newarrayelement". I think it doesn't matter whether you use operator or function-call syntax. > Same question for the a way to pop an element off the end in O(1) time. Offhand I don't remember any optimization for that, but I might be wrong. Looking at the comments in the plpgsql portion of the aforementioned commit would probably give more info. regards, tom lane