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 1sARKZ-009oBM-Fr for pgsql-general@arkaria.postgresql.org; Fri, 24 May 2024 09:35:21 +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 1sARKW-0043mC-Uo for pgsql-general@arkaria.postgresql.org; Fri, 24 May 2024 09:35:16 +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 1sARKW-0043m1-E2 for pgsql-general@lists.postgresql.org; Fri, 24 May 2024 09:35:16 +0000 Received: from mail-ej1-x62a.google.com ([2a00:1450:4864:20::62a]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1sARKP-001l9M-74 for pgsql-general@postgresql.org; Fri, 24 May 2024 09:35:14 +0000 Received: by mail-ej1-x62a.google.com with SMTP id a640c23a62f3a-a59a352bbd9so516663766b.1 for ; Fri, 24 May 2024 02:35:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cybertec-at.20230601.gappssmtp.com; s=20230601; t=1716543306; x=1717148106; darn=postgresql.org; h=mime-version:user-agent:content-transfer-encoding:autocrypt :references:in-reply-to:date:cc:to:from:subject:message-id:from:to :cc:subject:date:message-id:reply-to; bh=qqoC3ugh99SP/029wlaKgn3YCSh21MWVtVBnUGIkkEs=; b=X/5gSd08OlLB9QjbjGni0pbCmQtBszlpdl8di3nRV6N6RkxY2pORIeCVOBQAdoZPWd Agej6CKMmGlV1grc+Pk8V5FQRhKCB8SoHZN3W5FAeteiMYhKUDITbfEb8hTaNGTr4gxC A6LUbN/IbZxXNaZSq85fP4ufVmC6QmZ61ssq6W9q7y9Eqz41o2QLbtQNFHNW+iPZD16z 47BO63uZXaiw3T/jKiC9wGGFtIM7HR6HWb9zQorgRfzBtyL779BhMSUYeAMf+58SDo66 qQ3xH6t8kM9r7jOkFxG46BhJdrXiZInrugHbPf95jV3HIpAVSa3kQ0IxQiHaS0Mrtf6N D8fg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1716543306; x=1717148106; h=mime-version:user-agent:content-transfer-encoding:autocrypt :references:in-reply-to:date:cc:to:from:subject:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=qqoC3ugh99SP/029wlaKgn3YCSh21MWVtVBnUGIkkEs=; b=U8tidDd3wSDWSe5fscKAUMJYJEikGt8lri1bAJ9PJ3B8doz5uyWp+dinbKxqlRQR7X AMMeITjS/Id26TFrBqmxJi6f8SBi+8JZZq/HqInD5nasvzyeRn0tDuFd/pJe53MQB9m2 hbIzIVw1q7ocbec1t8vBG2Bp+pO1sHjiXeHGEy8VJRF9Nk72KU05+vTMqssZppqRLEgj n0QRbq0OeY5XhOssE6FtkXMZ9TdPdfuYZr42uTTmRD2rkaTMoqw38Lv53KXLo0N9Aahd aLmOXzvazmMDHIQh8wXTa4JrTtU/YS/8jVb+MMG1um69qnm5mFQ84AEP37dP9DJjvWAd y2IQ== X-Gm-Message-State: AOJu0Yzhe8QOvQsM0SH0vc2hgvG7weFCVwcaSaWm8ls6dVFcG1moTGLY n2scZOfAE19yqFId2cKCMX3unFBFvLoabkER05G6IYWpm7FaLw9WkLi58f+RHjk= X-Google-Smtp-Source: AGHT+IFotkMWWwUbRsTJBywepmaj7oVmrEPSvOCe+UML/IU70pVca1RLjZ1TCXiZhthhu1y1o7OFKA== X-Received: by 2002:a17:906:874c:b0:a62:2cac:b78e with SMTP id a640c23a62f3a-a62616df030mr159839566b.6.1716543305739; Fri, 24 May 2024 02:35:05 -0700 (PDT) Received: from localhost.localdomain ([2001:871:5e:9cba:1a6a:bc31:186f:b4c2]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-a626cc4ff07sm102308266b.135.2024.05.24.02.35.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 May 2024 02:35:05 -0700 (PDT) Message-ID: Subject: Re: Strange issue with unique index From: Laurenz Albe To: Tom Lane , rstander@exa.co.za Cc: pgsql-general@postgresql.org Date: Fri, 24 May 2024 11:35:04 +0200 In-Reply-To: <561365.1716517130@sss.pgh.pa.us> References: <420a01daad70$fcf2bd80$f6d83880$@exa.co.za> <561365.1716517130@sss.pgh.pa.us> Autocrypt: addr=laurenz.albe@cybertec.at; prefer-encrypt=mutual; keydata=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 +AnW5l0HsQcY9ntFL/zEBOaonjdJf Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable User-Agent: Evolution 3.50.4 (3.50.4-1.fc39) MIME-Version: 1.0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk On Thu, 2024-05-23 at 22:18 -0400, Tom Lane wrote: > writes: > > I've run into a strange issue with a unique index that I'm struggling t= o > > understand. I've extracted the basic info to reproduce this below. > > ... > > This will now block until session 2 is complete. I don't understand why= this > > would block. I do know it's that unique index causing the issue, but I = need > > the unique index in place. >=20 > No, it's not about the unique index. It's about the foreign key > constraint --- if you remove that, there is no blockage. The reason > why that's happening is that the insertions of dependent child rows > acquire row locks on the FK-referenced tuple, to prevent that row from > going away before the insertions commit. So when you then decide to > UPDATE the referenced row, that blocks on the other session's row lock. >=20 > I had an idea that we were bright enough to not block if the UPDATE > doesn't change the column(s) involved in the FK, but either I'm wrong > or that's not working in this example for some reason. It might be > that the fact that session 1 itself also holds such a row lock is > complicating matters. No, the problem is the unique constraint on "checksum". If you update a column that is part of a unique or primary key constraint, the row lock taken will be FOR UPDATE, not FOR NO KEY UPDATE. And the FOR UPDATE lock conflicts with the FOR KEY SHARE lock taken by the INSERT on the referenced row. Without the unique constraint, there would be no lock. Yours, Laurenz Albe