Re: jsonb_set() strictness considered harmful to data - Mailing list pgsql-general
From | Tomas Vondra |
---|---|
Subject | Re: jsonb_set() strictness considered harmful to data |
Date | |
Msg-id | 20191019192723.luarxhq57qkzuncw@development Whole thread Raw |
In response to | Re: jsonb_set() strictness considered harmful to data (Andrew Dunstan <andrew.dunstan@2ndquadrant.com>) |
Responses |
Re: jsonb_set() strictness considered harmful to data
Re: jsonb_set() strictness considered harmful to data |
List | pgsql-general |
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.vondra@2ndquadrant.com <mailto:tomas.vondra@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? regards -- Tomas Vondra http://www.2ndQuadrant.com PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
pgsql-general by date: