Search Postgresql Archives

Re: Guidance on INSERT RETURNING order

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




On Thu, Apr 13, 2023, at 8:26 AM, John Howroyd wrote:
> 
> However, the marshalling is presumably already happening (except any tie to ordering to the original declared tuples); otherwise I really don't understand how the with syntax (I think first suggested by Adrian Klaver) would work.  @SQLAlchemy, if you wanted to off load reordering to database side a combination solution might be considered:
> 
> with rslt as (
>   INSERT INTO mytable (a, b) 
>   SELECT p1, p2 FROM (VALUES (10, 11, 1), (12, 13, 2)) AS sel(p1, p2, num) ORDER BY num 
>   RETURNING mytable.id, mytable.other_auto_gen
> )
> select * from rslt
> order by id
> ;
> 
> should work (not yet tested); and could be modified to the "sentinel" columns.  

the solution I propose is essentially doing the same SQL as above, except we deliver the RETURNING in any order and do the final sort of "id" client side; we are only sending out batches of a few thousand rows at a time.    The "order" is not actually what's important, it's that we can relate server generated values to each tuple inside VALUES.


> @Mike Bayer: Isn't the order guarantee sufficient (wasn't that the original assumption in the 2.0 code)?  I do quite understand the wish for having one solution that fits all without dialectic dependencies.  However, in my opinion, this one is going to run for some time and is heavily dependent on internals.  With mssql, this seems to me to be deep down in the insert internals and unlikely to change any time soon (at least until they start losing market share because other DBMSs do it better).  Here (PostgreSQL) the actual mechanisms required can probably be achieved much more readily (given the will).  But the fundamental issue of matching code side objects with database records (with side effects) remains and is only going to become more prominent.  @PostgreSQL, isn't this your opportunity to lead the way again!-).

oh like I did for database URLs, right ? :)  which we then got in trouble for because we weren't using *pgs* format, which was inspired by ours in the first place...



(switching mail client to plain text, haven't used old school mailing lists in a long time...)





[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]

  Powered by Linux