Re: INSERT INTO .. SELECT nextval() ORDER BY - returns unexpectedly ordered values
От | Sjon Hortensius |
---|---|
Тема | Re: INSERT INTO .. SELECT nextval() ORDER BY - returns unexpectedly ordered values |
Дата | |
Msg-id | CAK_tfub78Gc7fgToha=BwfoiFQNSZ27nb7d9BZqrak6Eg-v1yA@mail.gmail.com обсуждение исходный текст |
Ответ на | Re: INSERT INTO .. SELECT nextval() ORDER BY - returns unexpectedly ordered values (Tom Lane <tgl@sss.pgh.pa.us>) |
Список | pgsql-bugs |
Thanks, that makes sense! On Thu, Sep 3, 2015 at 2:27 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote: > Sjon Hortensius <sjon@hortensius.net> writes: > > INSERT INTO test2 SELECT name, nextval('tmp'), id FROM test ORDER BY id > ASC; > > > I have worked around this by clustering the old table on the new id > before > > SELECTing but this behavior doesn't seem to be documented, is this a bug? > > No. You're assuming that the nextval() happens after the row ordering, > but this is not necessarily so --- indeed, a strict reading of the SQL > standard would imply that it should *never* be so, because the standard > execution model is that ORDER BY happens after computing the SELECT list. > (Without that, locutions like "ORDER BY 1" would make no sense.) It might > accidentally work if the ORDER BY were done via an indexscan rather than > an explicit sort step, but that's not possible in your test case. > > Try something like this to force the evaluation order: > > INSERT INTO test2 > SELECT name, nextval('tmp'), id FROM > (SELECT name, id FROM test ORDER BY id ASC) ss; > > regards, tom lane >
В списке pgsql-bugs по дате отправления: