Re: Is array_append O(n)?

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: Is array_append O(n)?
Дата
Msg-id 15730.1560880062@sss.pgh.pa.us
обсуждение исходный текст
Ответ на Re: Is array_append O(n)?  (Rob Nikander <rob.nikander@gmail.com>)
Список pgsql-general
Rob Nikander <rob.nikander@gmail.com> writes:
> On Jun 18, 2019, at 7:37 PM, Alvaro Herrera <alvherre@2ndquadrant.com> 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



В списке pgsql-general по дате отправления:

Предыдущее
От: Miles Elam
Дата:
Сообщение: Re: Inserts restricted to a trigger
Следующее
От: Rob Nikander
Дата:
Сообщение: delete inside for plpgsql loop on same relation?