Thanks, as ever, Tom, for the quick response. I’ll summarize your explanation as “Yes, there is indeed a logical parsing paradox”. Or, as you said, as “the SQL Standard committee—the gift that keeps on giving”.
> Tom wrote: > >> Bryn wrote: >> >> The "at time zone" clause that can decorate a timetsamp[tz] value seems to >> allow an argument that’s an arbitrary expression that yields a value whose >> data type is "interval". > > AT TIME ZONE is part of the SQL expression syntax, thus it's unsurprising > that its arguments can be arbitrary subexpressions. > >> set time zone '-7 hours'::interval; >> brings a "42601: syntax error". > > The SET statement, on the other hand, most definitely does not accept > expressions of any kind; only simple literals. That's in line with most > other utility commands in Postgres, but there are particularly good reasons > to be wary of trying to generalize SET. Cases such as SET TRANSACTION > ISOLATION LEVEL have to be able to execute without a transaction context at > all. > > Yeah, it's asymmetric :-(. But the SQL committee has gifted us with a pretty > asymmetric language, plus there are various implementation constraints that > are not that easy to get rid of.