Thread: [DOCS] intarray - benefits over regular int[]?
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.
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.
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?On Mon, Aug 21, 2017 at 9:02 PM, David G. Johnston <david.g.johnston@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.
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