Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1u9X5U-002yQb-Ru for pgsql-general@arkaria.postgresql.org; Mon, 28 Apr 2025 22:36:33 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1u9X5R-003jiU-9u for pgsql-general@arkaria.postgresql.org; Mon, 28 Apr 2025 22:36:30 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1u9X5Q-003jiM-OM for pgsql-general@lists.postgresql.org; Mon, 28 Apr 2025 22:36:30 +0000 Received: from mail-pl1-x644.google.com ([2607:f8b0:4864:20::644]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1u9X5O-00057R-1B for pgsql-general@lists.postgresql.org; Mon, 28 Apr 2025 22:36:28 +0000 Received: by mail-pl1-x644.google.com with SMTP id d9443c01a7336-22401f4d35aso65514825ad.2 for ; Mon, 28 Apr 2025 15:36:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=wikimedia.org; s=google; t=1745879783; x=1746484583; darn=lists.postgresql.org; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=WNIsPn5EGAj69s72cbuHzFNHjV3UsfGEI0fbIUR9nnE=; b=gzBpC+ORI0zBTCSYWqzMPBrqs8GTNpSIaGN1kbxK48+s6rS9Cd2OmP4a5kgXAzMm5r B6GJ3g+1cdmX9JUAZVEO4XO7EpryL6TpXcUUhwJ/5cb4fRsPglclltt0QR8gzMEVxXRD 2f1Z2GCevEMGoKjWNzjq/SMZSlSQwxq91Jzsc= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745879783; x=1746484583; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=WNIsPn5EGAj69s72cbuHzFNHjV3UsfGEI0fbIUR9nnE=; b=vIFadE/OHNL19YWAk4QXM8dIVgTX94kpLu7b9zQIvA1EumQZ1jz4X6envw+3w7FK3w xzPiMdp+TES6cqH0RA+fw+OdZGnMntWCEa7zkRxnIk8WTPwP3WaC1LeB5A9Ijrh7tgpc wOCoodfXZXEYdPnK8pI4rOvSNexKb9TG/BmvCWDDRmIKKQnrs/5rQ0y9tv68q/ThqTLO xf/m3F6gHdykj4QnrCn8Ydzbqm0FoPQtQKoBFzhChZXV1wsXmbNzSwL6LJzpe2ZnNlXK 7NKor/kAueUXK+nkBsPNQIjNLYRdhEAnsrDKaKndUYNyWfodvwG+aCoq1Tj7p5B4L4nF vS6g== X-Gm-Message-State: AOJu0YydRvld3pBG/ytY3Qvl7sVVDuGM2fotCDJnPNrMkL86v9CdMAM+ 1q6yxfDjuTBvqxxzfgJNgL98BOStanpA/jc0PYWxE0DfHCSC38HSztY0hTV/ZJLYLfUGcWsm2Qn EsGIyXQ== X-Gm-Gg: ASbGncvBbU/gumsIdd0n5v5M4xSyhE1oqI0/w4XOFyRMigoTCNcKRXCwNBZmUwfjbR0 eTDMJCNYDmAHsE9S/Voj07AAcLvzbsDFH2gL8YlcvqEmd4I91/+zG19Fuq7pgKsbqau/C4ww3IU bH+K4fMAiCxmm5Q0oFzYdPDi95t581SEOT/nXLpuBxaWMXiiqfm9Q2QIXIGyCnq3ASi9W54gzOB 7NBPTUguA6nRfUdTXVYyJBV4D3PS+EsYtEDo3yypEoGB9o5s1GCgwxlF2X5ksn2otcTB4zQHCHE zyNcj9j05qhkQlC89PUTs6rEYe6Q21Kl4EgbzCYGH35lcQ8fKQkHIAWYqalgWikst58ZHvkelWL YykI= X-Google-Smtp-Source: AGHT+IHeS/Z8bYAo+4J0A0iThoo+24SHZsiVY0tz/F/potMnf5BC/HnO+kTfBaRUyKRXdQs2HJ/8gQ== X-Received: by 2002:a17:902:d587:b0:227:e82b:b585 with SMTP id d9443c01a7336-22de7015e2fmr9957045ad.20.1745879783547; Mon, 28 Apr 2025 15:36:23 -0700 (PDT) Received: from [10.1.1.45] (124-168-128-17.dyn.iinet.net.au. [124.168.128.17]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-309ef061acdsm9681513a91.16.2025.04.28.15.36.22 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 28 Apr 2025 15:36:23 -0700 (PDT) Message-ID: <5fe1d1c9-662e-405e-aaed-21d15bdbea06@wikimedia.org> Date: Tue, 29 Apr 2025 08:36:18 +1000 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Upsert error "column reference is ambiguous" Content-Language: en-US To: Tom Lane Cc: pgsql-general@lists.postgresql.org References: <697017.1745837694@sss.pgh.pa.us> <80f95342-cc09-4236-a2d7-68538fbfc41b@wikimedia.org> <774865.1745848449@sss.pgh.pa.us> From: Tim Starling In-Reply-To: <774865.1745848449@sss.pgh.pa.us> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk On 28/4/25 23:54, Tom Lane wrote: > AFAIK, "ON CONFLICT" is a Postgres-ism. Exactly which constructs > in exactly which other databases are you citing as precedent? There's a list here: Since that page was written in 2014, SQLite added upsert support, consciously following PG's syntax, except that unqualified names resolve to target rows. My code would be like function upsert( $table, $names, $values, $key, $set ) { if ( $this->type === 'mysql' ) { $conflict = 'ON DUPLICATE KEY UPDATE'; } else { $conflict = "ON CONFLICT ($key) DO UPDATE SET"; } return $this->query( "INSERT INTO $table ($names) " . "VALUES ($values) $conflict $set" ); } The parameters are a little bit more structured than that, but that gives you the idea. MediaWiki has supported MySQL's ON DUPLICATE KEY UPDATE since 2013, and we've always had the conflict target parameter $key since then as a helper for emulation. So it's trivial to produce either MySQL and SQLite syntax. -- Tim Starling