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.98.2) (envelope-from ) id 1x7HcT-00000000GzB-23tr for pgsql-bugs@arkaria.postgresql.org; Thu, 17 Sep 2026 19:18:06 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.98.2) (envelope-from ) id 1x7HcS-00000005tDW-21S8 for pgsql-bugs@arkaria.postgresql.org; Thu, 17 Sep 2026 19:18:04 +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.98.2) (envelope-from ) id 1x7HcS-00000005tDN-0Vk4 for pgsql-bugs@lists.postgresql.org; Thu, 17 Sep 2026 19:18:04 +0000 Received: from mail-pj2-x0f.google.com ([2607:f8b0:4864:39::f]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1x7HcO-000000014hx-12lM for pgsql-bugs@postgresql.org; Thu, 17 Sep 2026 19:18:03 +0000 Received: by mail-pj2-x0f.google.com with SMTP id d9443c01a7336-2d747ed6d6eso12013255ad.2 for ; Thu, 17 Sep 2026 12:18:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=j-davis-com.20251104.gappssmtp.com; s=20251104; t=1789672678; x=1790277478; darn=postgresql.org; h=mime-version:user-agent:content-transfer-encoding:content-type:date :cc:to:from:subject:message-id:from:to:cc:subject:date:message-id :reply-to:content-type; bh=ZCPDzMvmuNA0QfMTby82ZE25zwAkiiENY1jlV9y34O4=; b=c4P1j0KGJY4E3Bk/xVbYDXDu2pYJtDaJ1liUy51B1lpddsG4yjmCZOHQxPJ3kI/UFf BTF6ghS2s9Ux9A9iS9rUEtBv1N2RcHSAqucHdVGddfaGiOQejnzBB3/akLjPHtIeiUVh pALSV77Ub7j8ixKsbGiWHrUoVP3mUG3dMdzRIyJCv1OhuFKc+OotcnRfHsNmAXLlP25N Uxr4weF727Vjbp6mZSBCOO5xU9Tu/qxbnAvYOrx9IBkaK9hOEU5NejvkBH1gzvOzV+C5 p/C0RS+ITxk9BdXguWE10xkNacsZw3bteMtIWYzPVcm5Nk43YqGvNd9aorYzXi+Vk/yL XROw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1789672678; x=1790277478; h=mime-version:user-agent:content-transfer-encoding:content-type:date :cc:to:from:subject:message-id:x-gm-gg:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to:content-type; bh=ZCPDzMvmuNA0QfMTby82ZE25zwAkiiENY1jlV9y34O4=; b=fr5lZOifB0uEz0FmmCxwqvTzilmwCZy09KIShVMEOBkV4MaWH13C17Q4HRuzPHa8cp l/0l/ckh6KhNTh4SWLBkO6Xw+76BqCrcN/qU0spakVfevphM6QGhExvgwUc/q1j48I2R 0GbuktaATQLnFnvqYUXhbqX0fM7Ozvjg1e/QCMkvn1s92NMXFe583Q1ag30r9KML2PGp WzWltWfAvvaqJo/U38Fh2MNdatOYZXD9mIb9rE9E7l9wjuGA7nVe7b0fBn/h2RQplxe5 v77ciUl3Iw2Zq9TXU2R5ZUYRluyhryS5IV16BrqtIMna4/T29vh7asSA80F0UQJJnZqa PbAQ== X-Gm-Message-State: AFuF++n64/rQ7+osFLPfoef515NB4kDQ1DuK1H7Bso9wArtlAyk5tQUo xWKFHKKKEbMr1WkdOBureYDeXlVy6USkP03+y5M/tUE1DvAOh6MAJBkvnTDXrIUNCg72vCTdREe MGTk= X-Gm-Gg: AYBFou2pA9VtXjtpzD9FHvfZlyCWnTMYv6NRd3duG74lBpmVedzEIvPRzSd76vf6U2s oKwaCkQQzpCe4rWiSTO2prwSpfyZri3kdV5I6zr9JzKkhKLMfZqB+oBqr3S4BWD+0rwqzjUVD2K ciJpV5v3gY1BwZ/L3dp1s5Eepr4+z3qgFCKWKvHgTwdbutToAVCEtL+O9byKSrS8lONSIMYm/lj gJBv7G6hcrfIswhfPLq00XQbUczP7bGWCMzXxbVWccAAzWSZmwpeisggzSeXSqQUWb1VkalkvDf A+UKgbea6nSlhfgAAL3R8HvghWir9lwL4+pSH5xHjkBWl2BjiWXDQ79X1+wZfVnd1mt2P384XjF n84rgXOpXiRH/YWHT4pFduXus3okIDois7uRfTVFbZHdwWcWz44OWcR6P/0/QMfjvkvDhSD9uNq btPt8/0UoNldb9lzX6jj5A/PBVdwJE5OYbAXx3ktxjYM00S1BjH0DPwzBxQnuzaBpSNe+bTVw1+ AtI8ZLKtA== X-Received: by 2002:a17:902:e741:b0:2c0:a555:80d6 with SMTP id d9443c01a7336-2ddb1aaf260mr4406805ad.2.1789672678024; Thu, 17 Sep 2026 12:17:58 -0700 (PDT) Received: from [10.10.247.208] ([50.175.226.11]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2dd89e92ebdsm30986185ad.13.2026.09.17.12.17.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 17 Sep 2026 12:17:57 -0700 (PDT) Message-ID: Subject: wrong results: merge when not matched by source From: Jeff Davis To: pgsql-bugs@postgresql.org Cc: Dean Rasheed Date: Thu, 17 Sep 2026 12:17:56 -0700 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable User-Agent: Evolution 3.52.3-0ubuntu1.1 MIME-Version: 1.0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk AI-discovered bug report appended to this email. Regards, Jeff Davis -- MERGE WHEN NOT MATCHED BY SOURCE + concurrent DELETE inserts a -- null-source row. Two sessions, READ COMMITTED. Affects 17+. -- -- Setup (either session): DROP TABLE IF EXISTS target; CREATE TABLE target (key int, val text); INSERT INTO target VALUES (1, 'matched'), (2, 'nms'); -- Session 1: BEGIN ISOLATION LEVEL READ COMMITTED; DELETE FROM target WHERE key =3D 2; -- holds the NMS row -- Session 2 (blocks on the NMS row): BEGIN ISOLATION LEVEL READ COMMITTED; MERGE INTO target t USING (SELECT 1 AS key, 'src' AS val) s ON t.key =3D s.key WHEN MATCHED THEN UPDATE SET val =3D s.val WHEN NOT MATCHED BY SOURCE THEN UPDATE SET val =3D 'nms-action' WHEN NOT MATCHED THEN INSERT VALUES (s.key, s.val) RETURNING merge_action(), t.*; -- Session 1: COMMIT; -- unblocks session 2 -- Session 2 then returns: -- -- merge_action | key | val -- --------------+-----+----- -- INSERT | | -- UPDATE | 1 | src -- -- Expected: only UPDATE of key=3D1; table is {(1, src)}. -- Actual: also INSERT of (NULL, NULL).