čt 17. 12. 2020 v 22:47 odesílatel Tom Lane <tgl@sss.pgh.pa.us> napsal:
Chapman Flack <chap@anastigmatix.net> writes: > That's likely to be what a programmer intends when writing > (variable explicitly typed integer) := js['n'] and > (variable explicitly types varchar) := js['v']
I think that what we want, if we're to support that sort of thing, is that the js[] constructs produce jsonb by definition, and then an assignment-level cast is applied to get from jsonb to integer or text. I see we already have most of the necessary casts, but they're currently marked explicit-only. Downgrading them to assignment level might be okay though. If we don't want to do that, it means we have to write integervar := js['n']::integer which is a bit more wordy but also unmistakable as to intent. (I think the "intent" angle might be the reason we insisted on these things being explicit to start with.)
It's somewhat interesting to speculate about whether we could optimize the combination of the subscripting function and the cast function. But (a) that's an optimization, not something that should be part of the user-visible semantics, and (b) it should not be part of the initial feature. I think a large part of the reason this patch is still not done after four years is that it's been biting off more than it could chew all along. Let's try to get it to completion and then optimize later.
sure
Pavel
As far as "treat as" is concerned, we already have a spelling for that, it's called a cast.