Dmitry Dolgov <9erthali...@gmail.com> writes: > On Tue, Dec 22, 2020 at 12:19:26PM +0100, Pavel Stehule wrote: >> I expect behave like >> >> update x set test[1] = 10; --> "[10]"; >> update x set test['1'] = 10; --> "{"1": 10}"
> Yes, I also was thinking about this because such behaviour is more > natural. I continue to feel that this is a fundamentally bad idea that will lead to much more pain than benefit. People are going to want to know why "test[1.0]" doesn't act like "test[1]". They are going to complain because "test[$1]" acts so much differently depending on whether they assigned a type to the $1 parameter or not. And they are going to bitch because dumping and reloading a rule causes it to do something different than it did before --- or at least we'd be at horrid risk of that; only if we hide the injected cast-to-text doesd the dumped rule look the way it needs to. Even then, the whole thing is critically dependent on the fact that integer-type constants are written and displayed differently from other constants, so it won't scale to any other type that someone might want to treat specially. So you're just leading datatype designers down a garden path that will be a dead end for many of them. IMO this isn't actually any saner than your previous iterations on the idea. regards, tom lane