From: | Erik Wienhold <ewie(at)ewie(dot)name> |
---|---|
To: | "David E(dot) Wheeler" <david(at)justatheory(dot)com>, pgsql-hackers(at)lists(dot)postgresql(dot)org |
Subject: | Re: JSON Path and GIN Questions |
Date: | 2023-09-13 01:00:07 |
Message-ID: | 133696180.303713.1694566807910@office.mailbox.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
Hi David,
On 13/09/2023 02:16 CEST David E. Wheeler <david(at)justatheory(dot)com> wrote:
> CREATE TABLE MOVIES (id SERIAL PRIMARY KEY, movie JSONB NOT NULL);
> \copy movies(movie) from PROGRAM 'curl -s https://raw.githubusercontent.com/prust/wikipedia-movie-data/master/movies.json | jq -c ".[]" | sed "s|\\\\|\\\\\\\\|g"';
> create index on movies using gin (movie);
> analyze movies;
>
> I have been confused as to the difference between @@ vs @?: Why do these
> return different results?
>
> david=# select id from movies where movie @@ '$ ?(@.title == "New Life Rescue")';
> id
> ----
> (0 rows)
>
> david=# select id from movies where movie @? '$ ?(@.title == "New Life Rescue")';
> id
> ----
> 10
> (1 row)
>
> I posted this question on Stack Overflow (https://stackoverflow.com/q/77046554/79202)
> and from the suggestion I got there, it seems that @@ expects a boolean to be
> returned by the path query, while @? wraps it in an implicit exists(). Is that
> right?
That's also my understanding. We had a discussion about the docs on @@, @?, and
jsonb_path_query on -general a while back [1]. Maybe it's useful also.
> If so, I’d like to submit a patch to the docs talking about this, and
> suggesting the use of jsonb_path_query() to test paths to see if they return
> a boolean or not.
+1
--
Erik
From | Date | Subject | |
---|---|---|---|
Next Message | ywgrit | 2023-09-13 01:14:04 | Is the member name of hashctl inappropriate? |
Previous Message | Kyotaro Horiguchi | 2023-09-13 00:59:22 | Re: Avoid a possible null pointer (src/backend/utils/adt/pg_locale.c) |