> On Thu, Dec 17, 2020 at 01:49:17PM -0500, Tom Lane wrote: > Dmitry Dolgov <9erthali...@gmail.com> writes: > > While rebasing the jsonb patch I found out that the current subscripting > > assignment implementation in transformAssignmentIndirection always > > coerce the value to be assigned to the type which subscripting result > > suppose to have (refrestype). For arrays it's fine, since those two > > indeed must be the same, but for jsonb (and for hstore I guess too) the > > result of subscripting is always jsonb (well, text type) and the > > assigned value could be of some other type. This leads to assigning > > everything converted to text. > > So ... what's the problem with that? Seems like what you should put > in and what you should get out should be the same type. > > We can certainly reconsider the API for the parsing hook if there's > really a good reason for these to be different types, but it seems > like that would just be encouraging poor design.
To be more specific, this is the current behaviour (an example from the tests) and it doesn't seem right: =# update test_jsonb_subscript set test_json['a'] = 3 where id = 1; UPDATE 1 =# select jsonb_typeof(test_json->'a') from test_jsonb_subscript where id = 1; jsonb_typeof -------------- string =# update test_jsonb_subscript set test_json = jsonb_set(test_json, '{a}', '3') where id = 1; UPDATE 1 =# select jsonb_typeof(test_json->'a') from test_jsonb_subscript where id = 1; jsonb_typeof -------------- number