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 1vVbI6-005Sxy-1l for pgsql-hackers@arkaria.postgresql.org; Tue, 16 Dec 2025 20:05:03 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vVbI5-008Kwn-0G for pgsql-hackers@arkaria.postgresql.org; Tue, 16 Dec 2025 20:05:01 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vVbI4-008Kwb-2E for pgsql-hackers@lists.postgresql.org; Tue, 16 Dec 2025 20:05:01 +0000 Received: from mail-pj1-x102d.google.com ([2607:f8b0:4864:20::102d]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vVbI2-0016UU-2B for pgsql-hackers@postgresql.org; Tue, 16 Dec 2025 20:05:00 +0000 Received: by mail-pj1-x102d.google.com with SMTP id 98e67ed59e1d1-34a4078f669so5179323a91.1 for ; Tue, 16 Dec 2025 12:04:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=j-davis-com.20230601.gappssmtp.com; s=20230601; t=1765915496; x=1766520296; darn=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=z17ZtJ+WsKjxzduIMGl65sunn553q85Xos9HFNyUCE0=; b=nZ8v66QSHqUoEPmOLb7NFqQjZ50OqPiTbWC96Jmmcaeerclnfd5RcY0JAV7manM+/6 u68yAO9FjM6K640/qaakRgi0OXHJWH9MRTqaLlujKEEZgExbfCvcwhQOHjR1oT0Wsj4X Vj4KCmMv4vHOOOBC7WgZAYHXMelQi1d35AkY2TXprze+1rv2Sf7oj07F0+5mLd9Qk/Qu Q3U0cBrls+kqtobFEObejQo4IWXemUIRCzDpH5+q+Jwj2NitqTy8Vh0mXInQDOUIHixP 9SAVwQunKXIH65PM27uOwPrGtr88PDFa9jkT3fDAJLtXCz08wue5bvVBGLf4Ui2HBBY9 zFEA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765915496; x=1766520296; 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=z17ZtJ+WsKjxzduIMGl65sunn553q85Xos9HFNyUCE0=; b=C4ow9zuHQtpV2YYE1M9AhdbFEWG77WD+GGSWOzZzJOxq/MDqmJqVFXso77aapa2oYp dhRFuKmtFBEEJJoUvdJC60sZgLzTE7vyadFJ+nLiuNAPpZ5bIzI2jLYc/roMTepFJo8y 8wyfUJsNvGZYIf8ys8rkkdt1y15dtDwRDACr2wYs60K6PTaJIkid2nI7cgNB38W7YUsI roA/mjOeyeDIJLnCnKhCBrDI6QCxf6LJDfJr8uoQMJv/pHhQEEEgnUZ3u9N04WkfEI5o 0X0jwUpgRnIWibCLnVFRaim18kjuWgLllSg7pGKjWNyHTt12NOuzWbJenBllxDo0jj5C fzTA== X-Forwarded-Encrypted: i=1; AJvYcCWFpnc/UMxHJfvFKP8Zk/c9Bs9fPRCBi4auuchBu9xKpjX6IR0SU9aPQTsENyzCTad7Td7xHVreUtJiPt2w@postgresql.org X-Gm-Message-State: AOJu0YzmGU+BnQhRdwRL764UF7twP7uXWBdwQa3CDNnhaamKCDHEiexb HZmC0pe0kJsW7oTLcc0C1qcvdC/RW88b6dezHGe6IaBFDOT7QYXnZbZERkSygboW8Q== X-Gm-Gg: AY/fxX6s/i1Lsft+MWcCM5emY9BOCS4MtMxgC8eLXTiyjbpFoe/loknJcD+NF+Q2z4/ a7JI7HoPYunRSz2OTz8k2bX2QTK+XwdbjER0gGo2FtcjtDSrBhD3ZOOffdmSvraDV0Kcaa9IXVF N+WDoRSki26L8KNLG/HZ3IObHgzXWe+cSvutI2clRE7yJv+FixP72U7YMJak6lCtqiBIk9ZCwxU V7ZmGcEU1Dww3a6W4Xt+SbZ2zatv45f3Hf/xcozV0aN1lUKeWjpeRKptvTqiLXz/k/ZCblX51b2 fNtLTMF3jAZXeWbbtb/1RtBqFGNke4Jthq/KHyqB9XoFVK7XeVa9S6JCra054YDRfuxBMGlvLMa mxWwo+/OaDgcj2tBvx+hnt3V7rn7oC3kRkmsmx3EEKljCsEof6Y+487UjW+O0aZApsbwctZRTSf 8s+9rfQpuZ7CsTsBx3xHApOxyl1XKzfUEI+rPZtnpe7qk= X-Google-Smtp-Source: AGHT+IHKY+UI+CiQ5jh+oA+BbdfeBLrektRLFFn3bkrUtjLJuz6kk3kyXwd37PU+nKiGh8/Hjk9Kwg== X-Received: by 2002:a17:90b:4f41:b0:340:9d52:44c1 with SMTP id 98e67ed59e1d1-34abd78fabbmr15718937a91.35.1765915496015; Tue, 16 Dec 2025 12:04:56 -0800 (PST) Received: from jeff-ws-bridge.lan (c-24-7-19-3.hsd1.ca.comcast.net. [24.7.19.3]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-c0c2bfa0165sm16118816a12.30.2025.12.16.12.04.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 16 Dec 2025 12:04:55 -0800 (PST) Message-ID: <01fc00fd66f641b9693d4f9f1af0ccf44cbdfbdf.camel@j-davis.com> Subject: Re: Remaining dependency on setlocale() From: Jeff Davis To: Chao Li Cc: Peter Eisentraut , Thomas Munro , Tom Lane , pgsql-hackers@postgresql.org Date: Tue, 16 Dec 2025 12:04:54 -0800 In-Reply-To: <651F79AB-8E21-4CDD-9A5A-221AC271265E@gmail.com> References: <4c5da86af36a0d5e430eee3f60ce5e06f1b5cd34.camel@j-davis.com> <6956823dd669abc64183fc91e64dc2e56e31f3ea.camel@j-davis.com> <8186b28a1a39e61a0d833a4c25a8909ebbbabd48.camel@j-davis.com> <450ceb6260cad30d7afdf155d991a9caafee7c0d.camel@j-davis.com> <78edc741a168c54d57cc898a5877b6443527a2c8.camel@j-davis.com> <83F6E6A9-FF29-41C9-9E15-EA5360E912D0@gmail.com> <5f65b85740197ba6249ea507cddf609f84a6188b.camel@j-davis.com> <38f3f4a6-e95e-47a7-914f-110dd6191301@eisentraut.org> <0e186a9a92634f0c5675a618ff5685d00cd8f836.camel@j-davis.com> <0E8DD47F-710D-45E1-B87F-2336042A377E@gmail.com> <5f70ee8a3f73df753285f8928c01dd32f14d7fcb.camel@j-davis.com> <651F79AB-8E21-4CDD-9A5A-221AC271265E@gmail.com> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable User-Agent: Evolution 3.52.3-0ubuntu1.1 MIME-Version: 1.0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk On Tue, 2025-12-16 at 09:32 +0800, Chao Li wrote: > I have re-reviewed 0003-0005 last week, they all look good to me. >=20 > I have no comment on backport 0003. Committed 0003 and backported to 14. Committing 0004 also. For the archives, the bug in that case is: -- generate some randomly-cased non-ASCII data CREATE DATABASE i TEMPLATE template0 LOCALE 'C' LOCALE_PROVIDER 'icu' ICU_LOCALE 'en'; \c i CREATE EXTENSION ltree; CREATE TABLE test(path ltree); CREATE FUNCTION gen() RETURNS TEXT LANGUAGE plpgsql AS $$ declare s TEXT; begin s :=3D ''; for i in 1..5 loop s :=3D s || case when random() > 0.5 then lower(U&'\00C1') else U&'\00C1' end; s :=3D s || case when random() > 0.5 then lower(U&'\00C9') else U&'\00C9' end; s :=3D s || case when random() > 0.5 then lower(U&'\00CD') else U&'\00CD' end; s :=3D s || case when random() > 0.5 then lower(U&'\00D3') else U&'\00D3' end; s :=3D s || case when random() > 0.5 then lower(U&'\00DA') else U&'\00DA' end; end loop; return s; end; $$; INSERT INTO test select ('a.'||gen()||'.z')::ltree FROM generate_series(1,10000); CREATE INDEX test_idx ON test USING gist (path); -- returns 10000 SET enable_seqscan =3D true; SET enable_indexscan =3D false; SET enable_bitmapscan =3D false; SELECT COUNT(*) FROM test WHERE path ~ U&'a.=C3=A1=C3=A9=C3=AD=C3=B3=C3=BA=C3=A1=C3=A9=C3=AD=C3= =B3=C3=BA=C3=A1=C3=A9=C3=AD=C3=B3=C3=BA=C3=A1=C3=A9=C3=AD=C3=B3=C3=BA=C3=A1= =C3=A9=C3=AD=C3=B3=C3=BA@.z'::lquery; -- returns fewer tuples when using index scan SET enable_seqscan =3D false; SET enable_indexscan =3D true; SET enable_bitmapscan =3D true; SELECT COUNT(*) FROM test WHERE path ~ U&'a.=C3=A1=C3=A9=C3=AD=C3=B3=C3=BA=C3=A1=C3=A9=C3=AD=C3= =B3=C3=BA=C3=A1=C3=A9=C3=AD=C3=B3=C3=BA=C3=A1=C3=A9=C3=AD=C3=B3=C3=BA=C3=A1= =C3=A9=C3=AD=C3=B3=C3=BA@.z'::lquery; Probably a smaller case would do, but I think it requires page splits to hit the bug. 0004 fixes the bug. > The old code didn=E2=80=99t create a locale object and store in result, t= hus > it didn=E2=80=99t have a logic to free the created locale. This patch now > dose that, but I don=E2=80=99t see where the created locale object is fre= e- > ed. I suppose newlocale() will allocate memory from the OS, so I > guess the memory should be free-ed somewhere. The pg_locale_t objects are cached for the life of the backend, and never freed. We may want to change that eventually, but in practice it's not much of a problem. Regards, Jeff Davis