> t...@sss.pgh.pa.us <mailto:t...@sss.pgh.pa.us> wrote:
> 
>> adrian.kla...@aklaver.com <mailto:adrian.kla...@aklaver.com> wote:
>> 
>>> Bryn wrote:
>>> 
>>> (1) In the context of discussing timezones, the English word "abbreviation" 
>>> maps to two distinct notions in PG: "pg_timezone_names.abbrev"; and 
>>> "pg_timezone_abbrevs.abbrev". Tom earlier said « there are two views 
>>> [because there are] two sources of truth involved ». This really means that 
>>> these two columns list different classes of facts. It's therefore 
>>> unfortunate that they both have the same name.
>> 
>> They are reporting the same facts, just in different context. 
> 
> No, Bryn's right really. pg_timezone_names.abbrev reports out what the IANA 
> (tzdb) database says is the abbreviation in use at the current time in the 
> indicated time zone. pg_timezone_abbrevs.abbrev reports about names defined 
> by the timezone_abbreviations configuration file. While those ought to be 
> generally in sync, there's no expectation that they necessarily match 
> one-to-one; they really can't given that the same abbreviation can be in use 
> to mean different things in different parts of the world. IANA will happily 
> report such inconsistent abbreviations, but timezone_abbreviations has to 
> treat names as unique keys, so at most one meaning of a given abbreviation 
> will be available there. Indeed there might be *no* entry there for an 
> abbreviation that appears in some row of pg_timezone_names, particularly if 
> an installation has chosen to trim the timezone_abbreviations contents in 
> order to reduce the potential for bad data entry. Conversely, there are quite 
> a few entries in our standard timezone_abbreviations list that match no entry 
> in tzdb. (Most of them used to, but IANA has been on a kick lately of 
> removing abbreviations that they invented.) And that's before you even get 
> into the question of dubious custom mods of timezone_abbreviations. Or custom 
> mods of the tzdb files, for that matter. Or timezone_abbreviations files that 
> aren't in sync with the tzdb database that's in use, which is an extremely 
> common situation given that we recommend use of "--with-system-tzdata".

Thank you very much, Tom. I should have taken more care with my wording. You 
said it very well, of course, here.

It seems to me, against the background that we've been discussing, that the 
pg_timezone_abbrevs view serves just this purpose: to provide a list of text 
strings that can be used as the argument for "at time zone" and as the tz 
specification in a timestamptz literal. Unfortunately, but for reasons that I 
can only accept, the pg_timezone_abbrevs view translates abbrev key values that 
are found into an offset value. But it doesn't necessarily error when presented 
with a key that it doesn't have. This, too, has been discussed at length in 
this exchanges. These examples make the point.

set timezone = 'UTC';
select '2021-05-23 19:00:00 foo42bar'::timestamptz;
select '2021-05-23 19:00:00'::timestamptz at time zone 'bar99foo';

Sadly, there's no simple way to enforce a practice for applications that want 
to avoid this risk unless, maybe, every such plain timestamp expression is 
constructed programmatically.

There is hope for this:

set timezone = 'bar99foo';

brought by the possibility of writing one's own set_timezone() function that 
checks the input values against pg_timezone_names.name. But it would win only 
half the battle.

Reply via email to