Search Postgresql Archives

Re: jsonb_set() strictness considered harmful to data

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 10/19/19 12:32 PM, David G. Johnston wrote:
> On Sat, Oct 19, 2019 at 9:19 AM Tomas Vondra
> <tomas.vondra@xxxxxxxxxxxxxxx <mailto:tomas.vondra@xxxxxxxxxxxxxxx>>
> wrote:
>
>     >
>     >We invented jsonb_set() (credit to Dmitry Dolgov). And we've had it
>     >since 9.5. That's five releases ago.  So it's a bit late to be
>     coming to
>     >us telling us it's not safe (according to your preconceptions of
>     what it
>     >should be doing).
>     >
>
>
> There have been numerous complaints and questions about this behavior
> in those five years; and none of the responses to those defenses has
> actually made the current behavior sound beneficial but rather have
> simply said "this is how it works, deal with it".


I haven't seen a patch, which for most possible solutions should be
fairly simple to code. This is open source. Code speaks louder than
complaints.


>
>     >
>     >We could change it prospectively (i.e. from release 13 on) if we
>     choose.
>     >But absent an actual bug (i.e. acting contrary to documented
>     behaviour)
>     >we do not normally backpatch such changes, especially when there is a
>     >simple workaround for the perceived problem. And it's that policy
>     that
>     >is in large measure responsible for Postgres' deserved reputation for
>     >stability.
>     >
>
>     Yeah.
>
>
> Agreed, this is v13 material if enough people come on board to support
> making a change.



We have changed such things in the past. But maybe a new function might
be a better way to go. I haven't given it enough thought yet.



>
>     >And if we were to change it I'm not at all sure that we should do
>     it the
>     >way that's suggested here, which strikes me as no more intuitive than
>     >the current behaviour. Rather I think we should possibly fill in
>     a json
>     >null in the indicated place.
>     >
>
>     Not sure, but that seems rather confusing to me, because it's
>     mixing SQL
>     NULL and JSON null, i.e. it's not clear to me why
>
> [...]
>
>     But I admit it's quite subjective.
>
>
> Providing SQL NULL to this function and asking it to do something with
> that is indeed subjective - with no obvious reasonable default, and I
> agree that "return a NULL" while possible consistent is probably the
> least useful behavior that could have been chosen.  We should never
> have allowed an SQL NULL to be an acceptable argument in the first
> place, and can reasonably safely and effectively prevent it going
> forward.  Then people will have to explicitly code what they want to
> do if their data and queries present this invalid unknown data to the
> function.
>
>

How exactly do we prevent a NULL being passed as an argument? The only
thing we could do would be to raise an exception, I think. That seems
like a fairly ugly thing to do, I'd need a h3eck of a lot of convincing.


cheers


andrew



-- 
Andrew Dunstan                https://www.2ndQuadrant.com
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services






[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]

  Powered by Linux