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 1wJckD-0004pc-0n for pgsql-bugs@arkaria.postgresql.org; Sun, 03 May 2026 19:44:49 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wJckC-004PSH-0j for pgsql-bugs@arkaria.postgresql.org; Sun, 03 May 2026 19:44:48 +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 1wJckB-004PS9-2j for pgsql-bugs@lists.postgresql.org; Sun, 03 May 2026 19:44:47 +0000 Received: from mail-oo1-xc2f.google.com ([2607:f8b0:4864:20::c2f]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wJck9-000000001mp-2cY8 for pgsql-bugs@postgresql.org; Sun, 03 May 2026 19:44:46 +0000 Received: by mail-oo1-xc2f.google.com with SMTP id 006d021491bc7-696ad0c2c2dso138320eaf.0 for ; Sun, 03 May 2026 12:44:46 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1777837485; cv=none; d=google.com; s=arc-20240605; b=ONqClGWjsENaRvzgA5glbCy/75joNI3PGDfd90ATJ7SIZ79y6TMIen67hKclJWr7Vf 8Kcikdhnqb/xcnf4itNgjSPkYXsZhTuOJK+Y5icdaFlwAsN9nT7MoXSwhlgWH9VSj0oV InEQSes7U4DEBztdS07SwChwnCU4y4kgVg/eLGGpJ4ZesXJfHvSPvtJHQqqtcHLCHuN4 2xc1IiDdS/sm4XwEUjZIx4bdLfM/kZkAiYPlVE5lkHqWS0yY6HdrPnBNnNc0tExzIxhE hzJgHQm9mE8qyuXKrtoFuPun670LuCJz3VReZDl4oYy3QQFEioUBXEejHRQ+/+kxdupr bd1g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=t1mNxulzaz4UQXgRpIsPQ6UCFzbsDgkEM4OGJcGUFPQ=; fh=iNVfgkaN+cpGzw+38uwlfWRc4zHhlqlvymt1AARzJTw=; b=dgEfY5T5UM5T/kMHRpEPhzf/sCFDJNcnQp0DplRpQX51FbJiHq92ql8Qne8IYdDxU4 r9/E+T/R2t0mU+1nrBFtKcDPpM9LDZ76Ob+S3YnazV7xaE2fU9smhI418xggspZb4GfK vua6EgA+Q68sof28SMyBjR92IHXrtK6ZRUZwqrfQIHN5MijwxC/IxpwTAFCk0h5rwhc8 StZQYxlVlUNBKt304yAVvoCvys3OHZBmq1Eo2G0rBR17msQqEvdCeqiI6AlgXP5aoPLU G1dueIE6CS57CTpFnYSYHdWQSodiJFHQzu2eHgMXxxbc5o6Vfq12RghOz9cNxomHvs8i RP3w==; darn=postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1777837485; x=1778442285; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=t1mNxulzaz4UQXgRpIsPQ6UCFzbsDgkEM4OGJcGUFPQ=; b=AjrXoyvG/R3n/Hm9WikBIP0eFFqFsmsKsbcIJfRugaEViYKYLegvsND+Ll0YdbcyXW /4lvM6pj7INUmE9L+JAtvng9xeXcKRHRI7+tIYcLAF/QiKBYJXTcGHYViZEHy40ZtFTT YMXjDW+FYyOJabkJH6ov2AI4AySOi0tfea8wQQF4kADrSY5VlLPEt+zKhZ13CizBL8Qe siAYDxstrMbmvow4JvaqtT5zNAf9WFZtMS0iGzF6ZnvCuzHzedrLjKirU+F3ZQHTdoN4 EAwKZ3+yGspr2ksVFrV6F7V1X/C+m4rV7au/zAvaKlthl29mraBqRLmJTEFB4w6hrNrD Exow== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777837485; x=1778442285; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=t1mNxulzaz4UQXgRpIsPQ6UCFzbsDgkEM4OGJcGUFPQ=; b=szuntuwsq0d0+E+yb9BQTGGXWSNsKkuIZrTDL12hG4LOVcceyPbvsONcxT1Zx1FYkM Gnf4kdkvzgao+v3KJyHj8Gc0xfGCHsz8TPQhf4zEAa0KfywQKTBCE3ZNjLF4huC0zzqa qNEv/PuRixWKZRyqr3kamdkqefpJ+GA0/5xFjrxuhxNLUlIsSK6A7HI8R2fZpZ9c0If7 SgKejE7Z2tmcxwpBqc5RfUz9eCM7EQv3hS+Kaps9TFPph34TXpdte/XZLdgbpV5ujnsz lwZOxBnFHZRukOSjO4DgovWsKntIAGWVkotBRrEYFEycBU/0ii2AgSLAyPBnn8HE3jzQ 2/hQ== X-Forwarded-Encrypted: i=1; AFNElJ9GVmdY/Y9wQZytkd/ZlWyPdif76/b3UQURbzmtot+ithkwj4G58Qm0PhQksXoC/qrmaXhdcA6miIBd@postgresql.org X-Gm-Message-State: AOJu0Yz3DD2IEuZWH3MzGLtykV2knEWakiW+u3fCBKGDSMLEoEVZ+q8f efCU7Dav6m1fkauks26Ipxmn/aHvAnfSWrZLbKIjruk+t37vYxle12gpoEdO1qtTyKAbPn48rI2 kRnCDXf6pCy+D2Kg5LFSfuoULA4fqZZY= X-Gm-Gg: AeBDiev8ciRaK2cBMkVZzf2YgqJEVhBoCcfg151VFp/AVSVbakMvTUTrFxIQ0G/b7b1 qnZ5Lhm77knpcV9MZYOdti1HV8jVkjHFKxUI67h/3l8fhqOtg0NSX6NRuDBJdkWJckJCp5N/MGa IFCrNX7HJhJhIl1msSk28BEjGUGw53JbaVBy/DkwoJ+41xRUMZzxtbXys04SMd49KQAkHnyOfbW O2n3yspWL+E7CTNTuXO+AY6xwUk4xypK/I8gTK2ZMMMAilBVZh8TZEsYFCPmhcTN8cNj4yxa4M1 FpIt/T6c8fl3dXhLL4WwVn+glhnSozg2Q2WdFmn89f2VXji1MzBMzCLQiaDbOPHbcqwU+mlq7Hn Eiprx7BnNOcoDEx2YHg== X-Received: by 2002:a05:6820:615:b0:694:8e6f:17a with SMTP id 006d021491bc7-696979fb6e6mr3072272eaf.23.1777837485025; Sun, 03 May 2026 12:44:45 -0700 (PDT) MIME-Version: 1.0 References: <0b535249-a00c-a38a-85f6-d5a38c62dd55@gmail.com> <7ckc7oka4bvafkf5bwlqs6ygrhlsbhz25ppozfch7zbuxcx3rf@e4pr4oqenalc> <71E42FAF-FF92-4EE5-94A5-341EFB891281@yandex-team.ru> In-Reply-To: <71E42FAF-FF92-4EE5-94A5-341EFB891281@yandex-team.ru> From: Alexander Korotkov Date: Sun, 3 May 2026 22:44:32 +0300 X-Gm-Features: AVHnY4I_NjVPnNi0lVwP-pPRJxyjXyQOHmRQ2t4rClC-NQ4qPBWeS_f6iazWPt0 Message-ID: Subject: Re: [BUG] false positive in bt_index_check in case of short 4B varlena datum To: Andrey Borodin Cc: Andres Freund , Alexander Lakhin , Michael Zhilin , pgsql-bugs@postgresql.org, Yura Sokolov Content-Type: multipart/mixed; boundary="000000000000c38f120650ef0bcd" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000c38f120650ef0bcd Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Sun, May 3, 2026 at 9:17=E2=80=AFPM Andrey Borodin wrote: > > On 2 May 2026, at 00:41, Andres Freund wrote: > > > > This is checking (as you noted) !VARATT_IS_EXTENDED, whereas the > > bt_normalize_tuple() code is checking !VARATT_IS_COMPRESSED. > > > > VARATT_IS_EXTENDED() will return true for short varlenas (because it's = not a > > standard 4 byte uncompressed varlena), whereas VARATT_IS_COMPRESSED() w= ill > > return false for a short varlena (since it's not compressed). > > > > I didn't find other instanes of similar code that uses !VARATT_IS_COMPR= ESSED. > > As far as I understand > > !VARATT_IS_COMPRESSED(DatumGetPointer(normalized[i])) && !VARATT_IS_SHORT= (DatumGetPointer(normalized[i])) > > is exactly > > !VARATT_IS_EXTENDED(DatumGetPointer(untoasted_values[i])) > > Which is what was proposed in v2 patch. But later was changed to !VARATT_= IS_COMPRESSED(). > As I understood it was done to further strengthen normalization. > > So the intent might be that short varatts need normalization in some case= s. But we have no tests that show such a case. > I tried to build a problematic storage alternation like [0], but everythi= ng works nicely. > > So I propose something in a line with attached patch. > > > Best regards, Andrey Borodin. > > [0] https://github.com/postgres/postgres/blob/master/contrib/amcheck/sql/= check_btree.sql#L170-L172 AFAICS, this is correct. However, I propose an alternative approach: use VARSIZE_ANY(). This might be a bit slower, but looks more intuitive to me. ------ Regards, Alexander Korotkov Supabase --000000000000c38f120650ef0bcd Content-Type: application/octet-stream; name="verify_nbtree_varsize_fix.patch" Content-Disposition: attachment; filename="verify_nbtree_varsize_fix.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_moq6i2qj0 ZGlmZiAtLWdpdCBhL2NvbnRyaWIvYW1jaGVjay92ZXJpZnlfbmJ0cmVlLmMgYi9jb250cmliL2Ft Y2hlY2svdmVyaWZ5X25idHJlZS5jCmluZGV4IGI3NGFiNWY3YTA1Li5lZWQyNjIwNmYxMCAxMDA2 NDQKLS0tIGEvY29udHJpYi9hbWNoZWNrL3ZlcmlmeV9uYnRyZWUuYworKysgYi9jb250cmliL2Ft Y2hlY2svdmVyaWZ5X25idHJlZS5jCkBAIC0yODg5LDcgKzI4ODksNyBAQCBidF9ub3JtYWxpemVf dHVwbGUoQnRyZWVDaGVja1N0YXRlICpzdGF0ZSwgSW5kZXhUdXBsZSBpdHVwKQogCQkJCQkJCUl0 ZW1Qb2ludGVyR2V0T2Zmc2V0TnVtYmVyKCYoaXR1cC0+dF90aWQpKSwKIAkJCQkJCQlSZWxhdGlv bkdldFJlbGF0aW9uTmFtZShzdGF0ZS0+cmVsKSkpKTsKIAkJZWxzZSBpZiAoIVZBUkFUVF9JU19D T01QUkVTU0VEKERhdHVtR2V0UG9pbnRlcihub3JtYWxpemVkW2ldKSkgJiYKLQkJCQkgVkFSU0la RShEYXR1bUdldFBvaW50ZXIobm9ybWFsaXplZFtpXSkpID4gVE9BU1RfSU5ERVhfVEFSR0VUICYm CisJCQkJIFZBUlNJWkVfQU5ZKERhdHVtR2V0UG9pbnRlcihub3JtYWxpemVkW2ldKSkgPiBUT0FT VF9JTkRFWF9UQVJHRVQgJiYKIAkJCQkgKGF0dC0+YXR0c3RvcmFnZSA9PSBUWVBTVE9SQUdFX0VY VEVOREVEIHx8CiAJCQkJICBhdHQtPmF0dHN0b3JhZ2UgPT0gVFlQU1RPUkFHRV9NQUlOKSkKIAkJ ewo= --000000000000c38f120650ef0bcd--