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.96) (envelope-from ) id 1vLOhq-00FIBU-2W for pgsql-docs@arkaria.postgresql.org; Tue, 18 Nov 2025 16:37:26 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vLOhp-007UOZ-0N for pgsql-docs@arkaria.postgresql.org; Tue, 18 Nov 2025 16:37:25 +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.96) (envelope-from ) id 1vLOho-007UOR-2i for pgsql-docs@lists.postgresql.org; Tue, 18 Nov 2025 16:37:25 +0000 Received: from mail-ej1-x635.google.com ([2a00:1450:4864:20::635]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vLOhm-000C3F-2Z for pgsql-docs@lists.postgresql.org; Tue, 18 Nov 2025 16:37:24 +0000 Received: by mail-ej1-x635.google.com with SMTP id a640c23a62f3a-b7370698a8eso578212266b.0 for ; Tue, 18 Nov 2025 08:37:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cybertec.at; s=google; t=1763483842; x=1764088642; darn=lists.postgresql.org; h=mime-version:user-agent:content-transfer-encoding:references :in-reply-to:date:cc:to:from:subject:message-id:from:to:cc:subject :date:message-id:reply-to; bh=RC4tyNEDGcfdmuxbQA83YHZUX2IDhOjosl8jIBjsKuk=; b=M4Ea1ol1jTZ36/4MY0p4bw1HllmZdYGKGPpEd/yu1yYD4KAO5KQwrFXJ2rZRnVjcwr 8eWU4nlU1Tl2KBm4gI6VBuDjGLW3H4jS/4wve4F4C0PWkdKyS5gkjCBAoSdZXy9oqZZF TID3Uw2RmpUiI3c66/dXF4C3H//ZmtclYPDBqgqH7fyF6hB2i+SO1YCSlSzu+veTvgWk sxU6RodKiVcvDJYiMemHHVB6fTtjnLmnySgpeFricDOf/vk9eU56KMhfLHSCWOdQF5wE Z97A/X838JDQut8vgV5Jdx18cA9VzUR/sT5Mf5/lT4OQ8bB2AQRkU/em7In4OEHDlLUC ffkQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763483842; x=1764088642; h=mime-version:user-agent:content-transfer-encoding:references :in-reply-to:date:cc:to:from:subject:message-id:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=RC4tyNEDGcfdmuxbQA83YHZUX2IDhOjosl8jIBjsKuk=; b=GqFELxmQXSXMUGrcudih/uS3oW0JYg/Ln/eHT2+grMG6HiyuzAkL2quVUtijwvp9v6 xh6aZg4ux63a2XUh71Hu6yWhkrQqZtkSIAP8I4HybUOuaW2Z/5Jf87jGBPqg3JdGCNKg FHhRyDT0o3EUtTk4lcDjeJSvDTrp/dbmjSZsd0C2oZO8q60XOsOAtx2H+Ze+C9liJTVo mXy7+BehN4PnVR55gJkOIQxlUy1BNMTmN3/EzjTfgP+OvXGD16qFsJNxcWPeRNN39vLK 3u6Tt9DmmPW3f472YV0yumscjlrxKTrBGxINVs0lltRxymRL96MZiJSRTx6i+9/lktgn Sauw== X-Forwarded-Encrypted: i=1; AJvYcCWV3Dxs6DuhCmAXAL6hN2ICfIwzuULInaAjPZeZlO/nCmu4EyZy/HVMeuRkLPfMIVnn1PaPKr2GK5xB@lists.postgresql.org X-Gm-Message-State: AOJu0YzBHl3o0KfMcxpCxF01pLqy1+HSVPPE5xHWbjdHykdkSeYn/Q3H kLFhdLXS9/nbwCNpnewvRlqq83MT07j7OwZn6i1/7ypOXq7C/Pwr0jLGO1XvFZTRL30= X-Gm-Gg: ASbGncu/XavbvM8FKADq42CanvFF5VQJges5VFgovROlqbYjXIgCfUfBegN0L8SGnQF gHPjEUDYbHbLG1SIXNOw+EXgFA8klXmM8WCRLXXkViMkARImNcqJXcnlF9zQVAyCTqaXeN/LQRW V9UrgYlzpbhrDsGnrHadokJSs5o4QWQ0EsrMEdfkKJ+RhKZ27hHNIP99wxgD5ay88anOJjnxQms xWjCBMpihmlRgEU1yWrH3M6KTxiJjSYT5xo26JKhvUrzO6YZdbh9TfGXWGayztU9KJ+58fnr8JY F+h3BUxCbznisageEowXQYBJh61gJJKwGsBlTZpidD/RiWcB6HEVEhozzBTvWYL6/3zz4ZRn82O PSeBMOrRgO9TjDPPuQ4TcxBilfzBsAmG42upxkbetjEacNo+xI0RPMf+9OB/zrvSava/f511a4S eOq7szhdKYQpbU3xzkrzvHIZG+G5DhuhXnPy2dltdX X-Google-Smtp-Source: AGHT+IHGziVVpocJzv7luPSHDvQnVFagC8dTNZAwAU998cuforLWUlVSBGlWJpY2ul7vnam83iJacA== X-Received: by 2002:a17:907:6e90:b0:b70:e15b:286a with SMTP id a640c23a62f3a-b7367c2938amr1986770766b.57.1763483841921; Tue, 18 Nov 2025 08:37:21 -0800 (PST) Received: from laurenz.albe-K4N0CV00F97414D ([213.83.186.126]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b734ff75e4fsm1391596266b.12.2025.11.18.08.37.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Nov 2025 08:37:21 -0800 (PST) Message-ID: <109c4b7c676cfde0d9c8666fa2c1f0063453df18.camel@cybertec.at> Subject: Re: Ambiguity in IS JSON description and logic From: Laurenz Albe To: r314tive , "David G. Johnston" Cc: Kirk Parker , vavankaru@gmail.com, pgsql-docs@lists.postgresql.org Date: Tue, 18 Nov 2025 17:37:21 +0100 In-Reply-To: References: <174238647361.682.12732328104350596711@wrigleys.postgresql.org> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable User-Agent: Evolution 3.56.2 (3.56.2-2.fc42) MIME-Version: 1.0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk On Tue, 2025-11-18 at 16:55 +0500, r314tive wrote: > Based on this discussion, I=E2=80=99ve prepared a small documentation pat= ch that > tries to clarify the behavior of the IS JSON ... UNIQUE KEYS clause. >=20 > The patch explains that: > - the WITH/WITHOUT UNIQUE KEYS clause controls an additional test on > =C2=A0 duplicate object keys, > - WITH UNIQUE KEYS requires that no object contained in the expression > =C2=A0 (recursively) have duplicate keys, and > - WITHOUT UNIQUE KEYS, which is also the default, just disables this > =C2=A0 additional test and does not require duplicates to be present. >=20 > Patch is attached. I don't think that the patch is really an improvement. To me, the original wording contains all the important information. The patch it somewhat repetetive and contains unnecessary detail. For example, I can see from the syntax diagram that I can use WITHOUT UNIQUE KEYS, and I have no trouble guessing what that means. Perhaps it would be enough to add something like "*recursively* checks for duplicate keys" or "checks for duplicate keys *on any nesting level*". Yours, Laurenz Albe