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 1uK20q-00C1Av-LE for pgsql-bugs@arkaria.postgresql.org; Tue, 27 May 2025 21:39:08 +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 1uK20p-00BSKo-2B for pgsql-bugs@arkaria.postgresql.org; Tue, 27 May 2025 21:39:07 +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 1uK20o-00BSKf-QI for pgsql-bugs@lists.postgresql.org; Tue, 27 May 2025 21:39:06 +0000 Received: from mail-ed1-x531.google.com ([2a00:1450:4864:20::531]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1uK20n-000GX7-07 for pgsql-bugs@lists.postgresql.org; Tue, 27 May 2025 21:39:05 +0000 Received: by mail-ed1-x531.google.com with SMTP id 4fb4d7f45d1cf-6020ff8d35dso554394a12.0 for ; Tue, 27 May 2025 14:39:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cybertec.at; s=google; t=1748381943; x=1748986743; 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=RMphAua4OWWGU1iqvac30xpwdoIih5lDQ70HmZn7+h4=; b=YadCGzqcOpvZUgM++LwQuPVunEGmnceJiTk0I9ToOaCvEyrKDF0BpTIZE5HYP9/uZQ 69/WjIO8jnRAKt2a7bv8gcF0U6p0EDpGS9AtD/Ih/pI7UrgYm5fFKDL4oqgS66h8RY2k g8R58XF5/1qZNvXMJRmBzNJ7K1m1ERm0fhqA+f3NJ1+WVlRxMI77W/WHAwXC8e+mfko7 LZjcyDOFtqvamv/gnQ9ITKgqvpFlFHWsEAGGKFxum4DMj19FW2SFuWht1ccinwTn48a+ kbHZKLmydWK00ixAQOgjq0FufU4RKCRGufOi0jjv5xzVbUe8gnJRSIehRI8UjzCJ/ZP8 472g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748381943; x=1748986743; h=mime-version:user-agent:content-transfer-encoding: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=RMphAua4OWWGU1iqvac30xpwdoIih5lDQ70HmZn7+h4=; b=j4DVW7Bypwh+1IA+3r6jWuOM717To3vv1VECLK+y8jFfyeCkScYeH8qBWCsNvLg1A9 d2GINX3S1JyJ/7LcPUlUdG2/rdqOtCXLMMIuwNacIpu9BgXggnonH98QVgq8qSjXndSS H/w/GyBsjtdRDVUX0sS/7y+5j8ONaiNnBAN+HNu2CmY8H86PKL+ZXV06scjAaq6AWqw7 bob7wHF1ELoKQkcKHmytVX5HTDrqZdhid6PJCmvnGMKL3MpVALje6uAYbFTMPE+PkVYj okDs20sdQncFPT9LmxB64cdrqJt0bnEP9zgDt68jljqHtADywVDWLG6VtAuKN5ZPukgo S0CA== X-Forwarded-Encrypted: i=1; AJvYcCULa50bLkussDMK/ODkMDfOOPiJCcqNk9ISUuWNrDC/aK3sRhZS4mL5gomJNFkJFtV2yCmEhXTNg/gu@lists.postgresql.org X-Gm-Message-State: AOJu0Yzei4n5x1QbDaTqOMN9jKWRwFFxQh4fm1DG2UNhL9wVlPOzHHAq B0+529Fb5JOJsv7OXNdz2viIYCQwA6WI0keuBBnSBQDwYHOip/e59YWBJKFtOSiGbmc= X-Gm-Gg: ASbGncs+p2yx9y66H8Z8UUO6giCsl+1TbZBvvatBMGxHhOYRWjJ5+mwUrA6GjPubR3y 8HgdTUgfYwzBT0ULiULQl6RrH3oHmBRFlyhC8Z8cnsDguc1Fdj3vrrpDz7Ry2k2j6/jB0gIJlVu yEu/+zKAN5BK12GcEg1WsQD2ax23vNDNE5jmsGW+/VvB1onN9R7RA4Nr8hqZKqblr9ORnUcvvnl ck7s0D9Xy7RTJZaadh0bk8ogi/gAYqMiWNFyKDfyjIDw9IP6s4d6OrByYhA2YDTL17jtQgPCeYE ldD/6mri57uTlKSrR+rUZIWPWK4Eg7VtNDfcrVck3DzyP+eJYjJPkQFr7jlFqkAv4jvGfECLzxY ktZmD2A== X-Google-Smtp-Source: AGHT+IF/bl2KZGZHWB6Cq2P0RBMZ9CWbVYN6B5CwSjGQEHi79m66rXqKZKYyqEnFVatPs7WPkvtpaA== X-Received: by 2002:a05:6402:40c6:b0:5fc:8c24:814d with SMTP id 4fb4d7f45d1cf-6050e57a398mr2009414a12.14.1748381943242; Tue, 27 May 2025 14:39:03 -0700 (PDT) Received: from laurenz.albe-K4N0CV00F97414D ([2001:871:260:b596:4291:490c:7ad5:d374]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-60517a9ba98sm137279a12.68.2025.05.27.14.39.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 27 May 2025 14:39:02 -0700 (PDT) Message-ID: Subject: Re: SIMILAR TO expressions translate wildcards where they shouldn't From: Laurenz Albe To: Tom Lane Cc: Michael Paquier , pgsql-bugs@lists.postgresql.org Date: Tue, 27 May 2025 23:39:02 +0200 In-Reply-To: <1101508.1748357652@sss.pgh.pa.us> References: <16ab039d1af455652bdf4173402ddda145f2c73b.camel@cybertec.at> <5498224d1d5a6a3be7f29ae7725f76162d48372f.camel@cybertec.at> <37584c1321b984a0c5c05d213ef70b869d95a12a.camel@cybertec.at> <1101508.1748357652@sss.pgh.pa.us> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable User-Agent: Evolution 3.56.2 (3.56.2-1.fc42) MIME-Version: 1.0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk On Tue, 2025-05-27 at 10:54 -0400, Tom Lane wrote: > Laurenz Albe writes: > > On Tue, 2025-05-27 at 14:57 +0900, Michael Paquier wrote: > > > With some tweaks and the tests reworked, I am finishing with the > > > reviewed version attached. What do you think? >=20 > > Thank you; I think that is good to go. >=20 > Code changes look good, but I think the test cases are too cute: >=20 > +EXPLAIN (VERBOSE, COSTS OFF) SELECT (SELECT '') SIMILAR TO '_[_[:alpha:]= _]_'; > + QUERY PLAN =20 > +--------------------------------------------------------------- > + Result > + Output: ((InitPlan 1).col1 ~ '^(?:.[_[:alpha:]_].)$'::text) > + InitPlan 1 > + -> Result > + Output: ''::text > +(5 rows) >=20 > This will break whenever somebody decides it's worth optimizing > a sub-select that looks like that. I'd suggest following the > pattern >=20 > explain (costs off) select * from text_tbl where f1 similar to 'z'; > QUERY PLAN =20 > ---------------------------------- > Seq Scan on text_tbl > Filter: (f1 ~ '^(?:z)$'::text) > (2 rows) >=20 > which is both less noisy and less likely to change in future. That's a good point. I originally considered EXPLAIN (GENERIC_PLAN), but that would only backpatch so far. Yours, Laurenz Albe