Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1e841Z-0006tj-Ru for pgsql-hackers@arkaria.postgresql.org; Fri, 27 Oct 2017 12:46:09 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.84_2) (envelope-from ) id 1e841Y-000107-6E for pgsql-hackers@arkaria.postgresql.org; Fri, 27 Oct 2017 12:46:08 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1e841W-0000zv-Fq for pgsql-hackers@postgresql.org; Fri, 27 Oct 2017 12:46:06 +0000 Received: from smtprelay0130.b.hostedemail.com ([64.98.42.130] helo=smtprelay.b.hostedemail.com) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1e841R-0004ho-CR for pgsql-hackers@postgresql.org; Fri, 27 Oct 2017 12:46:05 +0000 Received: from filter.hostedemail.com (10.5.19.248.rfc1918.com [10.5.19.248]) by smtprelay01.b.hostedemail.com (Postfix) with ESMTP id F33DD2D2A14; Fri, 27 Oct 2017 12:45:58 +0000 (UTC) X-Session-Marker: 616C76686572726540616C76682E6E6F2D69702E6F7267 X-Spam-Summary: 40,2.5,0,,d41d8cd98f00b204,alvherre@alvh.no-ip.org,:::,RULES_HIT:41:355:379:599:967:973:988:989:1260:1277:1311:1312:1313:1314:1345:1359:1437:1515:1516:1518:1519:1534:1541:1593:1594:1595:1596:1711:1730:1747:1777:1792:2196:2198:2199:2200:2393:2525:2560:2563:2682:2685:2693:2737:2828:2859:2915:2933:2937:2939:2942:2945:2947:2951:2954:3022:3138:3139:3140:3141:3142:3353:3865:3866:3867:3868:3870:3871:3872:3873:3874:3934:3936:3938:3941:3944:3947:3950:3953:3956:3959:4250:4605:5007:6117:6119:6120:6261:7809:7901:8784:9025:9121:10011:10400:10848:11026:11232:11658:11914:12294:12296:12679:13069:13073:13311:13357:13439:13894:13895:14093:14097:14721:14764:21063:21080:21324:21627:30054:30069:30070,0,RBL:none,CacheIP:none,Bayesian:0.5,0.5,0.5,Netcheck:none,DomainCache:0,MSF:not bulk,SPF:,MSBL:0,DNSBL:none,Custom_rules:0:1:0,LFtime:1,LUA_SUMMARY:none X-HE-Tag: honey82_33f87f8c21e01 X-Filterd-Recvd-Size: 2621 Received: from alvin.alvh.no-ip.org (net-37-182-231-222.cust.vodafonedsl.it [37.182.231.222]) (Authenticated sender: alvherre@alvh.no-ip.org) by omf12.b.hostedemail.com (Postfix) with ESMTPA; Fri, 27 Oct 2017 12:45:57 +0000 (UTC) Received: by alvin.alvh.no-ip.org (Postfix, from userid 1000) id 8E40A47B; Fri, 27 Oct 2017 14:45:55 +0200 (CEST) Date: Fri, 27 Oct 2017 14:45:55 +0200 From: Alvaro Herrera To: Simon Riggs Cc: PostgreSQL-development Subject: Re: MERGE SQL Statement for PG11 Message-ID: <20171027124555.txawx6p6veikx25x@alvherre.pgsql> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: User-Agent: NeoMutt/20170306-137-4415bd-dirty (1.8.0) List-Archive: List-Help: List-ID: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-Mailing-List: pgsql-hackers Precedence: bulk Sender: pgsql-hackers-owner@postgresql.org Simon Riggs wrote: > Earlier thoughts on how this could/could not be done were sometimes > imprecise or inaccurate, so I have gone through the command per > SQL:2011 spec and produced a definitive spec in the form of an SGML > ref page. This is what I intend to deliver for PG11. Nice work. I didn't verify the SQL spec, just read your HTML page; some very minor comments based on that: * use "and" not "where" as initial words in "when_clause" and "merge_update" clause definitions * missing word here: "the DELETE privilege on the if you specify" * I think the word "match." is leftover from some editing in the phrase " that specifies which rows in the data_source match rows in the target_table_name. match." In the same paragraph, it is not clear whether all columns must be matched or it can be a partial match. * In the when_clause note, it is not clear whether you can have multiple WHEN MATCHED and WHEN NOT MATCHED clauses. Obviously you can have one of each, but I think your doc says it is possible to have more than one of each, with different conditions (WHEN MATCHED AND foo THEN bar WHEN MATCHED AND baz THEN qux). No example shows more than one. On the same point: Is there short-circuiting of such conditions, i.e. will the execution will stop looking for further WHEN matches if some rule matches, or will it rather check all rules and raise an error if more than one WHEN rules match each given row? * Your last example uses ELSE but that appears nowhere in the synopsys. -- Álvaro Herrera https://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers