PostgreSQL jsonb_path_query_first() Function

Summary: in this tutorial, you will learn how to use the PostgreSQL jsonb_path_query_first() function to extract the first JSON value that matches a JSON path expression from a JSON document.

Neon Postgres - You build apps, we'll run the DB. Neon is serverless Postgres with time-saving features like autoscaling. Start Free

Sponsored

Introduction to the PostgreSQL jsonb_path_query_first() function

The jsonb_path_query_first() function allows you to query data from a JSONB document based on a JSON path expression and return the first match.

Here’s the basic syntax of the jsonb_path_query_first() function:

jsonb_path_query_first(jsonb_data, json_path)Code language: SQL (Structured Query Language) (sql)

In this syntax:

  • First, specify a JSONB data from which you want to query data.
  • Second, provide a JSON path to match elements in the JSONB data.

If the jsonb_path_query_first() function doesn’t find any match, it returns NULL.

PostgreSQL jsonb_path_query_first() function examples

Let’s explore some examples of using the jsonb_path_query_first() function.

1) Basic jsonb_path_query_first() function example

The following example uses the jsonb_path_query_first() function to get the first pet of a person:

SELECT jsonb_path_query_first(
    '{"name": "Alice", "pets": ["Lucy","Bella"]}',
    '$.pets[*]'
) AS first_pet_name;Code language: SQL (Structured Query Language) (sql)

Output:

 first_pet_name
----------------
 "Lucy"
(1 row)Code language: SQL (Structured Query Language) (sql)

2) Using the jsonb_path_query_first() function with table data

First, create a new table called person:

CREATE TABLE person (
    id SERIAL PRIMARY KEY,
    data JSONB
);Code language: SQL (Structured Query Language) (sql)

In the person table, the data column has the type of JSONB that stores employee information including name, age, and pets.

Second, insert data into the person table:

INSERT INTO person (data) 
VALUES
    ('{"name": "Alice", "age": 30, "pets": [{"type": "cat", "name": "Fluffy"}, {"type": "dog", "name": "Buddy"}]}'),
    ('{"name": "Bob", "age": 35, "pets": [{"type": "dog", "name": "Max"}]}'),
    ('{"name": "Charlie", "age": 40, "pets": [{"type": "rabbit", "name": "Snowball"}]}')
RETURNING *;Code language: SQL (Structured Query Language) (sql)

Third, retrieve the first pet name using the jsonb_path_query_first() function:

SELECT jsonb_path_query_first(data, '$.pets[*].name') AS first_pet_name
FROM person;Code language: SQL (Structured Query Language) (sql)

Output:

 first_pet_name
----------------
 "Fluffy"
 "Max"
 "Snowball"
(3 rows)Code language: SQL (Structured Query Language) (sql)

3) Handling missing paths

The following example attempts to find an element whose path does not exist:

SELECT jsonb_path_query_first(data, '$.email')
FROM person;Code language: SQL (Structured Query Language) (sql)

Output:

 jsonb_path_query_first
------------------------
 null
 null
 null
(3 rows)Code language: SQL (Structured Query Language) (sql)

In this case, the person object doesn’t have an email key, therefore the result is NULL.

Summary

  • Use the jsonb_path_query_first() function to extract the first JSON value that matches a JSON path expression from a JSON document.
Was this tutorial helpful ?