From: | David Rowley <dgrowleyml(at)gmail(dot)com> |
---|---|
To: | ganeshmmahesh(at)gmail(dot)com, PostgreSQL mailing lists <pgsql-bugs(at)lists(dot)postgresql(dot)org> |
Subject: | Re: BUG #17068: Incorrect ordering of a particular row. |
Date: | 2021-06-22 13:06:44 |
Message-ID: | CAApHDvr=A5ZMYm-Jy1g4AyfMBeOJGfP_5zJEW9N9k_S5PjwN4Q@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-bugs |
On Tue, 22 Jun 2021 at 21:39, PG Bug reporting form
<noreply(at)postgresql(dot)org> wrote:
> 5 | Nikon
> 1 |
> 1 |
> 1 |
> 3 |
> 3 |
> 3 |
> 3 |
> 5 |
> 4 |
> 4 |
> 4 |
> 4 |
> (44 rows)
> ```
>
> Problem:
> `5|` ordering is incorrect.
>
> Result expected:
> `5|` row should be the last row in the output.
That seems very bug-like to me. Thanks for reporting it.
I've attached an SQL file to make it easier to reproduce.
The top-level sort does appear to contain all the correct columns and
as far as I can tell the sort operation is using all the correct
functions during the comparison. record_cmp() seems to be correctly
returning 0 when the final columns being compared are both NULL.
Putting some debug inside btint4fastcmp(), it seems to receive:
NOTICE: a = 1, b = 3, compare = -1
NOTICE: a = 1, b = 3, compare = -1
NOTICE: a = 1, b = 3, compare = -1
NOTICE: a = 3, b = 3, compare = 0
NOTICE: a = 3, b = 3, compare = 0
NOTICE: a = 3, b = 3, compare = 0
NOTICE: a = 1, b = 3, compare = -1
NOTICE: a = 1, b = 3, compare = -1
NOTICE: a = 3, b = 3, compare = 0
NOTICE: a = 1, b = 3, compare = -1
NOTICE: a = 3, b = 3, compare = 0
NOTICE: a = 5, b = 3, compare = 1
NOTICE: a = 3, b = 3, compare = 0
NOTICE: a = 1, b = 1, compare = 0
NOTICE: a = 1, b = 1, compare = 0
NOTICE: a = 3, b = 3, compare = 0
NOTICE: a = 5, b = 3, compare = 1
NOTICE: a = 1, b = 3, compare = -1
NOTICE: a = 1, b = 3, compare = -1
NOTICE: a = 3, b = 3, compare = 0
NOTICE: a = 3, b = 3, compare = 0
NOTICE: a = 1, b = 3, compare = -1
NOTICE: a = 1, b = 1, compare = 0
NOTICE: a = 1, b = 1, compare = 0
NOTICE: a = 1, b = 1, compare = 0
NOTICE: a = 3, b = 3, compare = 0
NOTICE: a = 3, b = 3, compare = 0
NOTICE: a = 3, b = 1, compare = 1
NOTICE: a = 3, b = 3, compare = 0
NOTICE: a = 3, b = 3, compare = 0
NOTICE: a = 3, b = 3, compare = 0
NOTICE: a = 1, b = 3, compare = -1
NOTICE: a = 5, b = 3, compare = 1
NOTICE: a = 3, b = 3, compare = 0
NOTICE: a = 1, b = 3, compare = -1
NOTICE: a = 1, b = 3, compare = -1
NOTICE: a = 1, b = 1, compare = 0
NOTICE: a = 1, b = 1, compare = 0
NOTICE: a = 3, b = 5, compare = -1
NOTICE: a = 1, b = 3, compare = -1
NOTICE: a = 3, b = 3, compare = 0
NOTICE: a = 3, b = 3, compare = 0
NOTICE: a = 1, b = 3, compare = -1
NOTICE: a = 5, b = 3, compare = 1
NOTICE: a = 1, b = 3, compare = -1
NOTICE: a = 3, b = 3, compare = 0
NOTICE: a = 4, b = 4, compare = 0
NOTICE: a = 4, b = 4, compare = 0
NOTICE: a = 4, b = 4, compare = 0
NOTICE: a = 1, b = 1, compare = 0
NOTICE: a = 3, b = 5, compare = -1
NOTICE: a = 1, b = 3, compare = -1
NOTICE: a = 5, b = 3, compare = 1
NOTICE: a = 3, b = 3, compare = 0
NOTICE: a = 1, b = 3, compare = -1
NOTICE: a = 3, b = 3, compare = 0
NOTICE: a = 1, b = 3, compare = -1
NOTICE: a = 3, b = 3, compare = 0
NOTICE: a = 1, b = 1, compare = 0
NOTICE: a = 1, b = 1, compare = 0
NOTICE: a = 1, b = 1, compare = 0
NOTICE: a = 1, b = 1, compare = 0
It seems a bit fishy that the only 4s that appear here are being
compared to 4. How does qsort figure out that 5 > 4 or 4 < 5?
David
Attachment | Content-Type | Size |
---|---|---|
bug17068.sql | application/octet-stream | 2.2 KB |
From | Date | Subject | |
---|---|---|---|
Next Message | Thomas Munro | 2021-06-22 13:25:30 | Re: BUG #17068: Incorrect ordering of a particular row. |
Previous Message | Thomas Munro | 2021-06-22 13:00:31 | Re: BUG #17064: Parallel VACUUM operations cause the error "global/pg_filenode.map contains incorrect checksum" |