Re: Return rows in input array's order?

From: negora <public(at)negora(dot)com>
To: pgsql-general(at)lists(dot)postgresql(dot)org
Subject: Re: Return rows in input array's order?
Date: 2023-05-09 09:57:46
Message-ID: 7818bc4a-fe6e-e750-8e9f-c0c2a660e61e@negora.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Hi Dominique:

Take a look to the "unnest()" function. It transforms an array into a
set of rows. I believe I used it in the past to do something similar to
what you need.

Another option is to use a "values" expression (in a subquery) instead
of an array, and build the query dynamically.

Best regards.

On 09/05/2023 11:37, Dominique Devienne wrote:
> On Tue, May 9, 2023 at 11:23 AM David Wheeler <hippysoyboy(at)gmail(dot)com>
> wrote:
>
> > Hi. With an integer identity primary key table,
> > we fetch a number of rows with WHERE id = ANY($1),
> > with $1 an int[] array. The API using that query must return
> > rows in the input int[] array order, and uses a client-side
> > mapping to achieve that currently.
> >
> > Is it possible to maintain $1's order directly in SQL? Efficiently?
>
> We’ve done this before with an “order by array_index(id,
> input_array)”. I forget the actual function consider that pseudo code
>
>
> Thanks David. I see how this would work.
>
> It was only used for small arrays but never noticed any
> performance issues
>
>
> Hmmm, sounds like this would be quadratic though...
>
> Each call to array_index() will be O(N), so turn the sort into O(N^2)
> just from the array_index() calls,
> without even considering the sorting itself (which I assume is O(N log
> N)).
>
> I wonder whether the int[] can be turned into a pseudo table with a
> ROWNUM extra generated column that
> would then be (LEFT) JOIN'd to the accessed table, so that the
> original array index is readily accessible.
> Would something like this be possible in Postgres' SQL?
>
> I could then skip the sort, return that original index as part of the
> select,
> and thus be able to read the other columns directly in the correct
> client-side re-allocated vector-slot / structure...

In response to

Browse pgsql-general by date

  From Date Subject
Next Message David Wheeler 2023-05-09 10:35:55 Re: Return rows in input array's order?
Previous Message Dominique Devienne 2023-05-09 09:37:29 Re: Return rows in input array's order?