Re: Bug in ordered views?

From: Sebastian Böck <sebastianboeck(at)freenet(dot)de>
To: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: Nis Jorgensen <nis(at)superlativ(dot)dk>, pgsql-general(at)postgresql(dot)org
Subject: Re: Bug in ordered views?
Date: 2006-05-15 14:58:11
Message-ID: 44689703.6010108@freenet.de
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Tom Lane wrote:
> Nis Jorgensen <nis(at)superlativ(dot)dk> writes:
>
>>Try removing the DISTINCT ON from your view - that should make things
>>clearer to you. When t.approved is true, the row is joined to all rows
>>of the datum table satisfying the criteria. The sort order you specify
>>does not guarantee a unique ordering of the rows, which explains the
>>inconsistency between the two cases.
>
>
> More specifically, look at this:
>
> select t.test_id,d.projekt_id,d.datum,t.datum, t.id, t.approved,
> t.test_text
> FROM datum d
> JOIN test t ON
> (t.projekt_id = d.projekt_id OR t.approved IS TRUE) AND
> t.datum <= d.datum
> ORDER BY t.test_id DESC, d.projekt_id DESC, d.datum DESC, t.datum DESC;
> test_id | projekt_id | datum | datum | id | approved | test_text
> ---------+------------+------------+------------+----+----------+-----------
> 2 | 2 | 2006-05-16 | 2006-05-16 | 4 | f | new
> 2 | 2 | 2006-05-16 | 2006-05-15 | 2 | t | old
> 2 | 2 | 2006-05-15 | 2006-05-15 | 2 | t | old
> 2 | 1 | 2006-05-16 | 2006-05-15 | 2 | t | old
> 2 | 1 | 2006-05-15 | 2006-05-15 | 2 | t | old
> 1 | 2 | 2006-05-16 | 2006-05-15 | 1 | t | old
> 1 | 2 | 2006-05-16 | 2006-05-15 | 3 | f | new
> * 1 | 2 | 2006-05-15 | 2006-05-15 | 3 | f | new
> * 1 | 2 | 2006-05-15 | 2006-05-15 | 1 | t | old
> 1 | 1 | 2006-05-16 | 2006-05-15 | 1 | t | old
> 1 | 1 | 2006-05-15 | 2006-05-15 | 1 | t | old
> (11 rows)
>
> The two rows I've marked with * are identical in all the columns that
> are used in the DISTINCT ON and ORDER BY clauses, which means it's
> unspecified which one you get out of the DISTINCT ON. I'm not entirely
> sure why adding the test_id condition changes the results, but it may be
> an artifact of qsort() behavior. Anyway you need to constrain the ORDER
> BY some more to ensure you get well-defined results from the DISTINCT ON.
>
> regards, tom lane

Classical "pilot error". I recognized the missing order by a few
minutes after sending my message. Sorry for the noise, but it looked
totally reproducible, no matter what kind of where clause I added.

Thanks anyway

Sebastian

In response to

Browse pgsql-general by date

  From Date Subject
Next Message Martijn van Oosterhout 2006-05-15 15:03:53 Re: Getting information about sequences
Previous Message Tom Lane 2006-05-15 14:44:15 Re: Getting information about sequences