Re: jsonb concatenate operator's semantics seem questionable
От | Alvaro Herrera |
---|---|
Тема | Re: jsonb concatenate operator's semantics seem questionable |
Дата | |
Msg-id | 20150520184108.GD5885@postgresql.org обсуждение исходный текст |
Ответ на | Re: jsonb concatenate operator's semantics seem questionable (Petr Jelinek <petr@2ndquadrant.com>) |
Список | pgsql-hackers |
Petr Jelinek wrote: > On 20/05/15 01:38, Jim Nasby wrote: > >If we get this wrong now, we'll be stuck with it forever. At a minimum I > >think we should use anything other than || until we can figure this out. > >That leaves || available for whichever case we decide on. > > I am of strong opinion that concat should be shallow by default. Again it's > how jquery works by default, it's how python's dict.update works and you can > find this behavior in other languages as well when dealing with nested > hashes. It's also how json would behave if you'd just did string > concatenation (removing the outermost curly brackets) and parse it to json > afterwards. > > I think this whole discussion shows primarily that it's by far not > universally agreed if concatenation of json should be shallow or deep by > default and AFAICS this is true even in javascript world so we don't really > have where to look for precedents. > > Given the above I would vote to just provide the function and leave out the > || operator for now. +1 for providing just functions, not operators, for this JSON so-called "concatenation". But it is not really concatenation, is it? This is more like a "merge" operation. I mean, if you told somebody that this operation is concatenation 'xyz foo yxz' || 'bar' --> 'xyz bar yxz' they would laugh at you pretty hard. But that's precisely what is happening here: alvherre=# select jsonb '{"a": 1, "b": 2, "c": 3}' || '{"b": 4}'; ?column? --------------------------{"a": 1, "b": 4, "c": 3} (1 fila) -- Álvaro Herrera http://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
В списке pgsql-hackers по дате отправления: