Update our timezone code to IANA tzcode2026b
Tom Lane <tgl@sss.pgh.pa.us>
From: Tom Lane <tgl@sss.pgh.pa.us>
To: pgsql-hackers@lists.postgresql.org
Date: 2026-05-31T23:38:02Z
Lists: pgsql-hackers
Attachments
Here's a patch to do $SUBJECT. I looked into this due to Andres' report of a Valgrind uninitialized-memory complaint [1]. I can confirm that Valgrind no longer complains about this code. However, it seems like the uninitialized-memory issue didn't have any practical effect. The files generated by zic are mostly the same as before, and for the couple dozen that are not, testing with "zdump -v" shows that they represent the same set of timestamp transitions as before. I suppose that those changes are from internal algorithmic changes in zic. One file that changed was Asia/Tbilisi, which is called out in the upstream release notes for 2026a as no longer containing a useless no-op transition. I didn't bother trying to trace down the other data changes. There are a lot of changes in this patch, since we hadn't done a similar update since 2020. One that is rather annoying for our purposes is that they changed the signatures of both tzload() and tzparse(). Which they're entitled to do, both of those being internal to localtime.c --- except we'd unwisely exposed them as additional API. I think the best thing to do is make them both local functions again, so that they can track upstream, and instead export our own wrapper function. A question that immediately raises is whether it's enough of an API break to prevent back-patching this. Historically we've usually back-patched tzcode updates to ensure that we'll still be able to read future tzdata updates, and I was intending to do so again with this. But perhaps this API break is a reason not to. I don't see any really strong reason why extension modules would be calling tzload() or tzparse(), but maybe somebody is. So at the moment I'm leaning to "no backpatch". I'll park this in the upcoming CF for now. regards, tom lane [1] https://www.postgresql.org/message-id/4uukubkg3t5eavtxxzfa7smqbnqqvl3ysl7aptmj77zbtdxjh3%40krjnfntcirw6