Обсуждение: [DOCS] intarray - benefits over regular int[]?

Поиск
Список
Период
Сортировка

[DOCS] intarray - benefits over regular int[]?

От
theconor@gmail.com
Дата:
The following documentation comment has been logged on the website:

Page: https://www.postgresql.org/docs/10/static/intarray.html
Description:

Would it be possible for the intarray documentation to describe its benefits
over regular int[]?

At the moment I am a little unclear whether intarray is effectively a
deprecated module, or if it can still provide some distinct advantages -
e.g. performance, features or just a handy syntax -- for new projects too?

Thanks for any clarifications that can be given.

Re: [DOCS] intarray - benefits over regular int[]?

От
"David G. Johnston"
Дата:
On Mon, Aug 21, 2017 at 12:33 PM, <theconor@gmail.com> wrote:
The following documentation comment has been logged on the website:

Page: https://www.postgresql.org/docs/10/static/intarray.html
Description:
​[...]​
 
At the moment I am a little unclear whether intarray is effectively a
deprecated module, or if it can still provide some distinct advantages -
e.g. performance, features or just a handy syntax -- for new projects too?

​A quick skim of this and the generic array functions/operators documentation shows that numerous functions and operators exist for intarray that do not have equivalents in core.  For that alone I'd say this extension remains not-deprecated.

Its implied that it also performs better, ostensibly because the code need only considered non-null integer arrays whereas the general functions have to consider arrays of all types.  I'm not aware of any recent benchmark runs that would indicate whether improvements to arrays in recent versions of PostgreSQL have narrowed or eliminated that gap.

David J.

Re: [DOCS] intarray - benefits over regular int[]?

От
Conor McNally
Дата:
Thanks,

The line about it being faster gives me the reassurance that I need.  From just the introduction I was unsure of the actual benefit over int[] - the operators look like they can all be replicated using the standard library, albeit in much more convoluted ways!  Is it general advice therefore that if I've got an array of intergers, no nulls, it is advantageous for me to install and use intarray, and I'd really only want to use int[] if I had nulls?  Or is there something more to it?

Kind regards,

Conor

On Mon, Aug 21, 2017 at 9:02 PM, David G. Johnston <david.g.johnston@gmail.com> wrote:
On Mon, Aug 21, 2017 at 12:33 PM, <theconor@gmail.com> wrote:
The following documentation comment has been logged on the website:

Page: https://www.postgresql.org/docs/10/static/intarray.html
Description:
​[...]​
 
At the moment I am a little unclear whether intarray is effectively a
deprecated module, or if it can still provide some distinct advantages -
e.g. performance, features or just a handy syntax -- for new projects too?

​A quick skim of this and the generic array functions/operators documentation shows that numerous functions and operators exist for intarray that do not have equivalents in core.  For that alone I'd say this extension remains not-deprecated.

Its implied that it also performs better, ostensibly because the code need only considered non-null integer arrays whereas the general functions have to consider arrays of all types.  I'm not aware of any recent benchmark runs that would indicate whether improvements to arrays in recent versions of PostgreSQL have narrowed or eliminated that gap.

David J.

Re: [DOCS] intarray - benefits over regular int[]?

От
Tom Lane
Дата:
Conor McNally <theconor@gmail.com> writes:
> The line about it being faster gives me the reassurance that I need.  From
> just the introduction I was unsure of the actual benefit over int[] - the
> operators look like they can all be replicated using the standard library,
> albeit in much more convoluted ways!  Is it general advice therefore that
> if I've got an array of intergers, no nulls, it is advantageous for me to
> install and use intarray, and I'd really only want to use int[] if I had
> nulls?  Or is there something more to it?

TBH, I think that intarray is legacy code that we haven't got around to
replacing completely, but the handwriting is on the wall.  No one has put
any meaningful development effort into it in years; rather, the action
has been in improving the core code's array functionality.  And there are
definitely gotchas involved in using it without care.  Because it offers
variant versions of some of the same operator names defined by the core,
you can get cases where a query will not use an index because the query
is using the extension's <@ operator where the index is for the core <@
operator, or vice versa.  (See list archives for many complaints of
this kind.)

If you can show that use of intarray offers life-changing improvements
for your application over what the core code can do for you, then by
all means use it.  If it doesn't offer strong, measurable improvements,
I counsel against getting involved with it.

            regards, tom lane