Re: [HACKERS] MERGE SQL Statement for PG11
Simon Riggs <simon@2ndquadrant.com>
From: Simon Riggs <simon@2ndquadrant.com>
To: Peter Geoghegan <pg@bowt.ie>
Cc: Pavan Deolasee <pavan.deolasee@gmail.com>,
Robert Haas <robertmhaas@gmail.com>, Tomas Vondra <tomas.vondra@2ndquadrant.com>,
Alvaro Herrera <alvherre@alvh.no-ip.org>, Andrew Dunstan <andrew.dunstan@2ndquadrant.com>, Pavan Deolasee <pavan.deolasee@2ndquadrant.com>,
Stephen Frost <sfrost@snowman.net>, PostgreSQL-development <pgsql-hackers@postgresql.org>
Date: 2018-03-22T07:59:41Z
Lists: pgsql-hackers
On 21 March 2018 at 19:45, Peter Geoghegan <pg@bowt.ie> wrote: >>> * We never actually get around to saying that MERGE is good with bulk >>> loading, ETL, and so on. I think that we should remark on that in >>> passing. >> >> >> Suggestion? > > How about adding this sentence after "MERGE ... a task that would > otherwise require multiple procedural language statements": > > MERGE can synchronize two tables by modifying one table based on > differences between it and some other table. > > The point here is that we're primarily talking about two whole tables. > That deserves such prominent placement, as that suggests where users > might really find MERGE useful, but without being too prescriptive. The information I have is that many people are expecting MERGE to work for OLTP since that is how it is used in other databases, not solely as an ETL command. So we're not primarily talking about two whole tables. > Also, instead of saying "There are a variety of differences and > restrictions between the two statement types [MERGE and INSERT ... ON > CONFLICT DO UPDATE] and they are not interchangeable", you could > instead be specific, and say: > > MERGE is well suited to synchronizing two tables using multiple > complex conditions. Using INSERT with ON CONFLICT DO UPDATE works well > when requirements are simpler. Only ON CONFLICT provides an atomic > INSERT or UPDATE outcome in READ COMMITTED mode. > > BTW, the docs should be clear on the fact that "INSERT ... ON > CONFLICT" isn't a statement. INSERT is. ON CONFLICT is a clause. I think it would be better if you wrote a separate additional doc patch to explain all of this, perhaps in Performance Tips section or otherwise. -- Simon Riggs http://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
Commits
-
Add support for MERGE SQL command
- 7103ebb7aae8 15.0 landed
-
Add API of sorts for transition table handling in trigger.c
- 3a46a45f6f00 15.0 landed
-
Revert MERGE patch
- 08ea7a2291db 11.0 cited
-
Fix several bugs related to ON CONFLICT's EXCLUDED pseudo relation.
- ad2278379244 9.6.0 cited