Re: jsonb concatenate operator's semantics seem questionable

Поиск
Список
Период
Сортировка
От Petr Jelinek
Тема Re: jsonb concatenate operator's semantics seem questionable
Дата
Msg-id 555C1F0F.4050901@2ndquadrant.com
обсуждение исходный текст
Ответ на Re: jsonb concatenate operator's semantics seem questionable  (Jim Nasby <Jim.Nasby@BlueTreble.com>)
Ответы Re: jsonb concatenate operator's semantics seem questionable  (Peter Geoghegan <pg@heroku.com>)
Re: jsonb concatenate operator's semantics seem questionable  (Alvaro Herrera <alvherre@2ndquadrant.com>)
Список pgsql-hackers
On 20/05/15 01:38, Jim Nasby wrote:
> On 5/18/15 3:15 PM, Marko Tiikkaja wrote:
>> On 2015-05-18 22:10, Josh Berkus wrote:
>>> On 05/18/2015 01:04 PM, Ryan Pedela wrote:
>>>> In the context of splitting shallow and deep merge into two
>>>> operators, I
>>>> think + is better for shallow and || better for deep. The reason for +
>>>> is because many programming languages have this behavior. If I see the
>>>> below code in language I have never used before:
>>>>
>>>> objC = objA + objB
>>>>
>>>> My default assumption is that + performs a shallow merge. Like I
>>>> said, I
>>>> would rather there just be one operator.
>>>
>>> Thank you, that helps.  Anyone else?
>>
>> If everyone thinks the operators mean different things, we could just
>> not add any operators and only provide functions instead.
>
> My $0.02: I would expect || to be what I want to use to add something to
> an existing JSON document, no matter what the path of what I'm adding
> is. In other words, deep merge. I certainly wouldn't expect it to be
> shallow.
>
> 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.

--  Petr Jelinek                  http://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Training &
Services



В списке pgsql-hackers по дате отправления:

Предыдущее
От: Jim Nasby
Дата:
Сообщение: Re: Change pg_cancel_*() to ignore current backend
Следующее
От: Peter Geoghegan
Дата:
Сообщение: Re: Minor ON CONFLICT related fixes