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 1sT3Y3-00Cgnj-Md for pgsql-hackers@arkaria.postgresql.org; Sun, 14 Jul 2024 18:02:11 +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 1sT3Y1-006PTK-4o for pgsql-hackers@arkaria.postgresql.org; Sun, 14 Jul 2024 18:02:09 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1sT3Y0-006PTC-KK for pgsql-hackers@lists.postgresql.org; Sun, 14 Jul 2024 18:02:08 +0000 Received: from mail-ej1-x629.google.com ([2a00:1450:4864:20::629]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1sT3Xx-0022lp-K2 for pgsql-hackers@postgresql.org; Sun, 14 Jul 2024 18:02:07 +0000 Received: by mail-ej1-x629.google.com with SMTP id a640c23a62f3a-a77e7a6cfa7so402856066b.1 for ; Sun, 14 Jul 2024 11:02:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1720980123; x=1721584923; darn=postgresql.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=42gDPVxwMd4tSATrD6CuHpD6ldShywClQWP+ctq6uxI=; b=gk988ILFEO5gpqYPg4rlmGCTh6NtqA4m5Y7H3Us2WY+Cp0bGdh1Fz7ms0pRxo7GkM2 2UqWJ66K5PvxERoCg8KhbtAcCO2QeoFS1GsF2cRI72fZABGuo+yom4vbKQERKTWsfmHT S11MWSR4q9O+IgDRgC1lTujT7NlpaNCgHNb91SrvE/hXLPi0lTMUkgja5l8YEkMuoW6x 9torIMQM2vg7jav4CxOII7G4G9YXyfXY0Kh47UH2oUPGWm7h+K+pnKN00ubrn1DZm+xq KkQ7uDC8pS+q2OO9lv6W5liB+0U8hGS+/0QKQTKTLKdn7WjT4/hpWGUi0TjZ0uLzi1Wx /8uQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1720980123; x=1721584923; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=42gDPVxwMd4tSATrD6CuHpD6ldShywClQWP+ctq6uxI=; b=wS7pc2YZLiOndi3hfUBx64eGY8bvKXRzdFUpn6VO98q7lJUT993VEWqZeBD6Lgeodm glLrFI771AKO4svbYBIZq7934q5LpQ9WMV7OB8olXkZaCFxmkwRODvfdtFZM1IFpQrj5 jSXIVJARAcXEI61rT/FaOEcWIHqxDqIjrhez7Ve9uVpUfc6rSaShCgXlP+LaEmS6nIk8 AOunZ4w1ItAXCpzMp1crnu7Ydv1xlpTcKTTDttM21WPWVE8C/ERQevGNMVhgFmWYDtJ0 ISMaaq49ZMisympffhC/USkLxJmcX8l6zr9zJmcX+13b22Z/W/1HAqnx33pDWK/XyQ8z NTIQ== X-Gm-Message-State: AOJu0Yy6YJC6GWSswikVm1XCE9WAfqnZAaLosefJiHQfNHdptNWVbSWq /nkeliuzmKjQAXGv9gH3v3ZpYx+vLMS1DK/jXvqwkcQDKS0fbGIaUDnve6fZgsXlwiUqBW+ExFo fw+VLBIe2v/QLx2ppf0x9j34f9N+30KS6 X-Google-Smtp-Source: AGHT+IFq8slElLMPCRIgJ3VXdHFORU+PrK5WXH8ebXef0aBpCCNbm4XbU1jQkJ/dv1KCPIsCqfXemV5egxlQ5ISHkok= X-Received: by 2002:a17:907:60d4:b0:a77:e0ed:8bc with SMTP id a640c23a62f3a-a780b68a411mr1413157366b.4.1720980122501; Sun, 14 Jul 2024 11:02:02 -0700 (PDT) MIME-Version: 1.0 From: Michail Nikolaev Date: Sun, 14 Jul 2024 20:01:50 +0200 Message-ID: Subject: [BUG?] check_exclusion_or_unique_constraint false negative To: PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000de2b20061d38e8e7" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000de2b20061d38e8e7 Content-Type: multipart/alternative; boundary="000000000000de2b1f061d38e8e5" --000000000000de2b1f061d38e8e5 Content-Type: text/plain; charset="UTF-8" Hello, everyone! While reviewing [1], I noticed that check_exclusion_or_unique_constraint occasionally returns false negatives for btree unique indexes during UPSERT operations. Although this doesn't cause any real issues with INSERT ON CONFLICT, I wanted to bring it to your attention, as it might indicate an underlying problem. Attached is a patch to reproduce the issue. make -C src/test/modules/test_misc/ check PROVE_TESTS='t/006_*' .... Failed test 'concurrent INSERTs status (got 2 vs expected 0)' # at t/006_concurrently_unique_fail.pl line 26. # Failed test 'concurrent INSERTs stderr /(?^:^$)/' # at t/006_concurrently_unique_fail.pl line 26. # 'pgbench: error: client 34 script 0 aborted in command 0 query 0: ERROR: we know 31337 in the index! Best regards, Mikhail, [1]: https://www.postgresql.org/message-id/flat/CANtu0ogs10w%3DDgbYzZ8MswXE3PUC3J4SGDc0YEuZZeWbL0b6HA%40mail.gmail.com#8c01dcf6051e28c47d25e9471736947e --000000000000de2b1f061d38e8e5 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hello, everyone!

While reviewing [1], I= noticed that check_exclusion_or_unique_constraint occasionally returns fal= se negatives for btree unique indexes during UPSERT operations.
A= lthough this doesn't cause any real issues with INSERT ON CONFLICT, I w= anted to bring it to your attention, as it might indicate an underlying pro= blem.

Attached is a patch to reproduce the issue.

=
make -C src/test/modules/test_misc/ check PROVE_TESTS=3D't/0= 06_*'
....
=C2=A0 =C2=A0Failed test 'concur= rent INSERTs status (got 2 vs expected 0)'
# =C2=A0 at t/006_concurrently_unique_fail.pl= line 26.

# =C2=A0 Failed test 'concurrent INSERTs stderr /(?^:^= $)/'
# =C2=A0 at t/006_concurrently_unique_fail.pl line 26.
# =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 'pgbench: error: client 34 sc= ript 0 aborted in command 0 query 0: ERROR: =C2=A0we know 31337 in the inde= x!

Best regards,
Mikhail,
=
--000000000000de2b1f061d38e8e5-- --000000000000de2b20061d38e8e7 Content-Type: text/x-patch; charset="US-ASCII"; name="test_+_assert_to_reproduce_possible_issue_with_check_exclusion_or_unique_constraint.patch" Content-Disposition: attachment; filename="test_+_assert_to_reproduce_possible_issue_with_check_exclusion_or_unique_constraint.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lylutier0 U3ViamVjdDogW1BBVENIXSB0ZXN0ICsgYXNzZXJ0IHRvIHJlcHJvZHVjZSBwb3NzaWJsZSBpc3N1 ZSB3aXRoIGNoZWNrX2V4Y2x1c2lvbl9vcl91bmlxdWVfY29uc3RyYWludAotLS0KSW5kZXg6IHNy Yy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRleGluZy5jCklERUEgYWRkaXRpb25hbCBpbmZvOgpT dWJzeXN0ZW06IGNvbS5pbnRlbGxpai5vcGVuYXBpLmRpZmYuaW1wbC5wYXRjaC5DaGFyc2V0RVAK PCs+VVRGLTgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhl Y0luZGV4aW5nLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjSW5kZXhpbmcuYwotLS0gYS9z cmMvYmFja2VuZC9leGVjdXRvci9leGVjSW5kZXhpbmcuYwkocmV2aXNpb24gZDVlNjg5MTUwMmNh OWUzNTlhYTVmNWEzODFkOTA0ZmU5ZDYwNjMzOCkKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv ZXhlY0luZGV4aW5nLmMJKGRhdGUgMTcyMDk3OTM2Nzc2NikKQEAgLTg4OSw2ICs4ODksMTEgQEAK IAl9CiAKIAlpbmRleF9lbmRzY2FuKGluZGV4X3NjYW4pOworCWlmICghY29uZmxpY3QgJiYgdmFs dWVzWzBdID09IDMxMzM3KSB7CisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09E RV9FWENMVVNJT05fVklPTEFUSU9OKSwKKwkJCQkJCWVycm1zZygid2Uga25vdyAzMTMzNyBpbiB0 aGUgaW5kZXghIikpKTsKKwl9CiAKIAkvKgogCSAqIE9yZGluYXJpbHksIGF0IHRoaXMgcG9pbnQg dGhlIHNlYXJjaCBzaG91bGQgaGF2ZSBmb3VuZCB0aGUgb3JpZ2luYWxseQpJbmRleDogc3JjL3Rl c3QvbW9kdWxlcy90ZXN0X21pc2MvdC8wMDZfY29uY3VycmVudGx5X3VuaXF1ZV9mYWlsLnBsCklE RUEgYWRkaXRpb25hbCBpbmZvOgpTdWJzeXN0ZW06IGNvbS5pbnRlbGxpai5vcGVuYXBpLmRpZmYu aW1wbC5wYXRjaC5DaGFyc2V0RVAKPCs+VVRGLTgKPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC0tZ2l0IGEvc3Jj L3Rlc3QvbW9kdWxlcy90ZXN0X21pc2MvdC8wMDZfY29uY3VycmVudGx5X3VuaXF1ZV9mYWlsLnBs IGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X21pc2MvdC8wMDZfY29uY3VycmVudGx5X3VuaXF1ZV9m YWlsLnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwJKGRhdGUgMTcyMDk3OTI4 NTg0MCkKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X21pc2MvdC8wMDZfY29uY3VycmVudGx5 X3VuaXF1ZV9mYWlsLnBsCShkYXRlIDE3MjA5NzkyODU4NDApCkBAIC0wLDAgKzEsMzkgQEAKKwor IyBDb3B5cmlnaHQgKGMpIDIwMjQsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3Vw CisKKyMgVGVzdCBSRUlOREVYIENPTkNVUlJFTlRMWSB3aXRoIGNvbmN1cnJlbnQgbW9kaWZpY2F0 aW9ucyBhbmQgSE9UIHVwZGF0ZXMKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7CisKK3VzZSBD b25maWc7Cit1c2UgRXJybm87CisKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwordXNl IFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwordXNlIFRlc3Q6Ok1vcmU7CisKKworbXkgKCRub2Rl LCAkcmVzdWx0KTsKKyRub2RlID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdSQ190 ZXN0Jyk7Ciskbm9kZS0+aW5pdDsKKyRub2RlLT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25m JywgJ2ZzeW5jID0gb2ZmJyk7Ciskbm9kZS0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZics ICdhdXRvdmFjdXVtID0gb2ZmJyk7Ciskbm9kZS0+c3RhcnQ7Ciskbm9kZS0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsIHEoQ1JFQVRFIFVOTE9HR0VEIFRBQkxFIHRibChpIGludCBwcmltYXJ5IGtleSwg biBpbnQpKSk7CisKKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcShJTlNFUlQgSU5UTyB0 YmwgVkFMVUVTKDMxMzM3LDEpKSk7CisKKyRub2RlLT5wZ2JlbmNoKAorCSctLW5vLXZhY3V1bSAt LWNsaWVudD00MCAtLXRyYW5zYWN0aW9ucz0xMDAwJywKKwkwLAorCVtxcnthY3R1YWxseSBwcm9j ZXNzZWR9XSwKKwlbcXJ7XiR9XSwKKwknY29uY3VycmVudCBJTlNFUlRzJywKKwl7CisJCSdvbl9j b25mbGljdHMnID0+IHEoCisJCQlJTlNFUlQgSU5UTyB0YmwgVkFMVUVTKDMxMzM3LDEpIG9uIGNv bmZsaWN0KGkpIGRvIHVwZGF0ZSBzZXQgbiA9IEVYQ0xVREVELm4gKyAxOworCQkpCisJfSk7CisK KyRub2RlLT5zdG9wOworZG9uZV90ZXN0aW5nKCk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmls ZQo= --000000000000de2b20061d38e8e7--