Re: jsonpath
От | Nikita Glukhov |
---|---|
Тема | Re: jsonpath |
Дата | |
Msg-id | 9f5f1247-29f4-17cd-edd9-38e9bcd95b14@postgrespro.ru обсуждение исходный текст |
Ответ на | Re: jsonpath (Tomas Vondra <tomas.vondra@2ndquadrant.com>) |
Ответы |
Re: jsonpath
|
Список | pgsql-hackers |
On 28.01.2019 16:50, Tomas Vondra wrote:
On 1/28/19 1:22 AM, Alexander Korotkov wrote:* I decided to change behavior of jsonb_path_match() to throw as less errors as possible. The reason is that it's used to implement potentially (patch is pending) indexable operator. Index scan is not always capable to throw as many errors and sequential scan. So, it's better to not introduce extra possible index scan and sequential scan results divergence.Hmmm, can you elaborate a bit more? Which errors were thrown before and are not thrown with the current patch version?
In the previous version of the patch jsonb_path_match() threw error when jsonpath did not return a singleton value, but in the last version in such cases NULL is returned. This problem arises because we cannot guarantee at compile time that jsonpath expression used in jsonb_path_match() is a predicate. Predicates by standard can return only True, False, and Unknown (errors occurred during execution of their operands are transformed into Unknown values), so predicates cannot throw errors, and there are no problems with errors. GIN does not attempt to search non-predicate expressions, so there may be no problem even we throw "not a singleton" error. Here I want to remind that ability to use predicates in the root of jsonpath expression is an our extension to standard that was created specially for the operator @@. By standard predicates are allowed only in filters. Without this extension we are still able to rewrite @@ using @?: jsonb @@ 'predicate' is equivalent to jsonb @? '$ ? (predicate)' but such @? expression is a bit slower to execute and a bit verbose to write. If we introduced special type 'jsonpath_predicate', then we could solve the problem by checking the type of jsonpath expression at compile-time. Another problem with error handling is that jsonb_path_query*() functions always throw SQL/JSON errors and there is no easy and effective way to emulate NULL ON ERROR behavior, which is used by default in SQL/JSON functions. So I think it's worth trying to add some kind of flag 'throwErrors' to jsonb_path_query*() functions. -- Nikita Glukhov Postgres Professional: http://www.postgrespro.com The Russian Postgres Company
В списке pgsql-hackers по дате отправления: