intarray - benefits over regular int[]?

Started by Conor McNallyover 8 years ago4 messagesdocs
Jump to latest
#1Conor McNally
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.

--
Sent via pgsql-docs mailing list (pgsql-docs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-docs

#2David G. Johnston
david.g.johnston@gmail.com
In reply to: Conor McNally (#1)
Re: intarray - benefits over regular int[]?

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.

#3Conor McNally
theconor@gmail.com
In reply to: David G. Johnston (#2)
Re: intarray - benefits over regular int[]?

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:

Show quoted text

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.

#4Tom Lane
tgl@sss.pgh.pa.us
In reply to: Conor McNally (#3)
Re: intarray - benefits over regular int[]?

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

--
Sent via pgsql-docs mailing list (pgsql-docs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-docs