Hello,

On Sat, Oct 19, 2019, 3:27 PM Tomas Vondra <tomas.von...@2ndquadrant.com>
wrote:

> On Sat, Oct 19, 2019 at 12:47:39PM -0400, Andrew Dunstan wrote:
> >
> >On 10/19/19 12:32 PM, David G. Johnston wrote:
> >> On Sat, Oct 19, 2019 at 9:19 AM Tomas Vondra
> >> <tomas.von...@2ndquadrant.com <mailto:tomas.von...@2ndquadrant.com>>
> >> 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.
> >
>
> IMHO that might be a bit too harsh - I'm not surprised no one sent a
> patch when we're repeatedly telling people "you're holding it wrong".
> Without a clear consensus what the "correct" behavior is, I wouldn't
> send a patch either.
>
> >
> >>
> >>     >
> >>     >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.
> >
>
> I think the #1 thing we should certainly do is explaining the behavior
> in the docs.
>
> >
> >
> >>
> >>     >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.
> >
>
> I don't know, but if we don't know what the "right" behavior with NULL
> is, is raising an exception really that ugly?
>

Raising an exception at least would prevent people from blanking their
column out unintentionally.

And I am willing to write a patch to do that if we have consensus on how to
change it.

Ariadne

Reply via email to