Re: Default order on displaying data without order clause

From: Dave Caughey <caugheyd(at)gmail(dot)com>
To: Doug Easterbrook <doug(at)artsman(dot)com>
Cc: wim(dot)bertels(at)ucll(dot)be, Janus <janus(dot)e(at)gmail(dot)com>, "pgadmin-support lists(dot)postgresql(dot)org" <pgadmin-support(at)lists(dot)postgresql(dot)org>
Subject: Re: Default order on displaying data without order clause
Date: 2019-03-15 18:35:50
Message-ID: CAAj2gHzJArzLznOA4r4gKB6P8bxMruCuH=iRVQ9aPbXm7iOvgw@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgadmin-support

I think you're confusing my point.

You're right that you never want to add an *implicit* default to the order
clause. That would be changing the SQL standard which, as you've noted,
would be really bad.

But, we're talking about a tool that constructs *explicit* queries in order
to display the data in the table... I.e., when you right-click on a table
in pgAdmin and select "View/Edit Data...", pgAdmin is fully in control of
whether it generates either

SELECT * FROM public.sometable

or

SELECT * FROM public.sometable ORDER BY somecolumn ASC

In the second case, there is no *implicit* default... it's very explicitly
specified, and does not in anyway change/contradict the SQL standard. It's
just the tool stepping in and doing what I end up having to do manually.
every. frickin'. time.

Another UI concept that could be applied here is to simply remember my
previous settings, on a table-by-table basis. E.g., if I do a "View/Edit
Data..." once, and *explicitly* change the ORDER BY clause to be "ORDER BY
price DESC" then it's very a very smart thing to add to SELECT the next
time I do a "View/Edit Data..." on that table. And if I subsequently
change to be "ORDER BY qty ASC" then that becomes a smart default to
continue to use on subsequent "View/Edit Data..." queries. Or, if I
actually remove the default ORDER BY, then it's smart thing to remember
that choice and continue to use no ORDER BY.

But certainly, if the user explicitly indicates that they *do* want an
ORDER BY clause, then continuously defaulting to no ORDER BY clause each
time they do a "View/Edit Data...", on the same table, is arbitrarily
picking a behaviour that you clearly know that the user doesn't prefer.
Why not just do for the user the same thing they explicitly asked you to do
for last time? From a UX perspective, this approach requires the least
amount of interaction by the user in order to get what exactly they want.

And from a UX design perspective, the advantage of the this approach is
that it doesn't require yet-another option to support/document.

Cheers,
Dave

On Fri, Mar 15, 2019 at 1:59 PM Doug Easterbrook <doug(at)artsman(dot)com> wrote:

> I’m disagreeing with dave.
>
> to be clear. you NEVER want to add an implicit default to the order
> clause. EVER.
>
> Postgres returns data in the order that it returns it (sql standard)
> unless you specify otherwise.
>
> the python mantra: it is better to be EXPLICIT than IMPLICIT.
>
> If you do not provide an explicit sort order and rely on some implicit
> ordering, then your code will break in the future if you are relying on the
> order from the engine… and its harder to find problems if pgadmin has
> different behaviour than sending the same query through psql or the
> postgres libraries.
>
> final point is that PGadmin just gives the database your query. if
> Pgadmin altered my SQL code for me, I’d be angry since i’ve wanted to know
> what order postgres felt it wanted to return the data.
>
> its not pgadmin's job to fix my mistakes. it my job to fix my mistakes.
>
>
> do I agree that people want a natural order in a gui. Absolutely but
> you need to be explicit which one.
>
>
>
> *Doug Easterbrook*
> *Arts Management Systems Ltd.*
> mailto:doug(at)artsman(dot)com <doug(at)artsman(dot)com>
> http://www.artsman.com
> Phone (403) 650-1978
>
> On Mar 15, 2019, at 8:24 AM, Dave Caughey <caugheyd(at)gmail(dot)com> wrote:
>
> Yeah, but that's just what the spec says about how the SELECT works. It's
> not a statement about how a user interface should display information.
>
> Presenting unordered information is basically guaranteed to be never what
> the user wants. In this case, the user has to *almost always* edit the
> query to add a sensible "order by" clause.
>
> On the other hand, picking a default column (e.g., PK, or insertion order)
> is probably going to be the desirable behaviour most of the time (but
> rarely, not). In this case, the user has *almost never* edit the query
> to remove/alter the default "order by" clause.
>
> So you've got a UI decision of doing something that'll be "right" (i.e.,
> what the user wants) most of the time, or "wrong" (i.e., what the user
> doesn't want) most of the time. This is an easy win.
>
> Cheers,
> Dave
>
>
> On Fri, Mar 15, 2019 at 9:19 AM Wim Bertels <wim(dot)bertels(at)ucll(dot)be> wrote:
>
>> Janus schreef op vr 15-03-2019 om 12:20 [+0100]:
>> > In pgAdmin 3, an implicit default order by primary key is used when
>> > displaying data without an otherwise stated order. This is not the
>> > case in pgAdmin 4. The order seems somewhat arbitrary and the
>> > following statement from this site is definitely not true: "When you
>> > query data from a table, PostgreSQL returns the rows in the order
>> > that they were inserted into the table."
>>
>> Hallo Janus,
>>
>> this standard behaviour, as described by the ISO standard
>> :: ie unless you specify an ORDER BY clause, the order can be anything,
>> like a (unordered) set;
>>
>> the example of "the way there were inserted", this might often be the
>> case, but it's not a rule
>> more background: see planner, shared mem and cache
>>
>> >
>> > I do understand that some order of course exists, but from a
>> > human perspective it would make sense that default ordering is by PK,
>> > unless stated otherwise. In PgAdmin 4, is it possible to set a
>> > default ordering, at least so that displaying a table's contents
>> > using the "View Data" button, i.e. the query being run is altered
>> > from "SELECT oid, * FROM public.mytable" to "SELECT oid, * FROM
>> > public.mytable ORDER BY <primary key(s)>"?
>>
>> i only see the filter/sort option
>>
>> >
>> > Thanks!
>> --
>> mvg,
>> Wim Bertels
>> --
>> Lector
>> UC Leuven-Limburg
>> --
>> Let me take you a button-hole lower.
>> -- William Shakespeare, "Love's Labour's Lost"
>>
>>
>

In response to

Responses

Browse pgadmin-support by date

  From Date Subject
Next Message Isaias Sanchez 2019-03-18 08:27:44 Error Exporting to CSV
Previous Message Doug Easterbrook 2019-03-15 17:59:12 Re: Default order on displaying data without order clause