intarray sort returns wrong result

Started by Junwang Zhaoalmost 2 years ago3 messageshackers
Beta feature

Hackorum builds and tests every patch posted to the lists, not only commitfest submissions. This is Hackorum's own CI rather than the PostgreSQL project's, and it is still under testing - please report anything that looks wrong.

won't retrysuccessCI history

You can run a PostgreSQL built from this patch straight from Docker, with no checkout and no build:

docker run --rm -p 5432:5432 ghcr.io/hackorum-dev/postgres-patch:t50548
psql -h localhost -U postgres

Built from patchset v1 (message #1), July 27, 2026 at 10:35 PM.

Every patchset is also pushed to a branch of our PostgreSQL fork, so you can check out the same tree CI built. Without a PostgreSQL checkout:

git clone --branch t50548_1 https://github.com/hackorum-dev/postgres.git

In a checkout you already have, add the fork once:

git remote add hackorum https://github.com/hackorum-dev/postgres.git

then, for this patchset and every later one:

git fetch hackorum t50548_1 && git checkout t50548_1

Patchset v1 (message #1) is on t50548_1

Jump to latest
#1Junwang Zhao
zhjwpku@gmail.com

Hi Hackers,

While working on general array sort[1]/messages/by-id/CAEG8a3KD7ZmQpxNhfPxyc0BjTTTUXiqb56VuMgB7Muu0+yV=qQ@mail.gmail.com, I played with intarray
extension, found a bug (or at least inconsistency) when sorting
multidimensional int array:

create extension intarray;
select sort('{{1,2,3}, {2,3,4}}');

this returns {{1,2,2},{3,3,4}} instead of {{1,2,3},{2,3,4}}

I think this is misleading, if int array is only for one dimension
array, we should
error out when sorting multidimensional int array. Or we can do something like
attached POC patch to make it work with multidimensional int array.

Thoughts?

[1]: /messages/by-id/CAEG8a3KD7ZmQpxNhfPxyc0BjTTTUXiqb56VuMgB7Muu0+yV=qQ@mail.gmail.com

--
Regards
Junwang Zhao

Attachments:

t50548_1
v1-0001-int-array-support-multi-dim.patchapplication/octet-stream; name=v1-0001-int-array-support-multi-dim.patchDownload+73-4
#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Junwang Zhao (#1)
Re: intarray sort returns wrong result

Junwang Zhao <zhjwpku@gmail.com> writes:

While working on general array sort[1], I played with intarray
extension, found a bug (or at least inconsistency) when sorting
multidimensional int array:

create extension intarray;
select sort('{{1,2,3}, {2,3,4}}');

this returns {{1,2,2},{3,3,4}} instead of {{1,2,3},{2,3,4}}

This is documented, isn't it?

Many of these operations are only sensible for one-dimensional
arrays. Although they will accept input arrays of more dimensions,
the data is treated as though it were a linear array in storage
order.

I don't think anyone will thank us for changing intarray's behavior
many years after the fact.

regards, tom lane

#3Junwang Zhao
zhjwpku@gmail.com
In reply to: Tom Lane (#2)
Re: intarray sort returns wrong result

On Tue, Nov 12, 2024 at 9:13 AM Tom Lane <tgl@sss.pgh.pa.us> wrote:

Junwang Zhao <zhjwpku@gmail.com> writes:

While working on general array sort[1], I played with intarray
extension, found a bug (or at least inconsistency) when sorting
multidimensional int array:

create extension intarray;
select sort('{{1,2,3}, {2,3,4}}');

this returns {{1,2,2},{3,3,4}} instead of {{1,2,3},{2,3,4}}

This is documented, isn't it?

Many of these operations are only sensible for one-dimensional
arrays. Although they will accept input arrays of more dimensions,
the data is treated as though it were a linear array in storage
order.

I did not notice this statement, my bad 😞

I don't think anyone will thank us for changing intarray's behavior
many years after the fact.

Agreed. Sorry for the noise.

regards, tom lane

--
Regards
Junwang Zhao