Teams switch from Aurora Serverless to Neon for better performance and 80% less costs. Read more

PostgreSQL jsonb_path_query() Function

Summary: in this tutorial, you will learn how to use the PostgreSQL jsonb_path_query() function to query JSONB data using JSON path expressions.

Introduction to the PostgreSQL jsonb_path_query() function

The jsonb_path_query() function allows you to query JSONB data based on a JSON path expression.

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

jsonb_path_query(jsonb_data, path_expression)

In this syntax:

  • jsonb_data is the JSONB data that you want to query.
  • path_expression is a JSON path expression that locates values or elements in the JSONB data.

The jsonb_path_query() function returns JSONB data that matches the specified JSON path expression.

If the path_expression does not locate any element in the jsonb_data, the function returns NULL.

PostgreSQL jsonb_path_query() function example

Let’s take some examples of using the jsonb_path_query() function.

Setting up a sample table

First, create a table named productswith a JSONB column names attributes to store product attributes:

CREATE TABLE products (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    attributes JSONB
);

Second, insert some rows into the products table:

INSERT INTO products (name, attributes)
VALUES
    ('Laptop', '{"brand": "Dell", "price": 1200, "specs": {"cpu": "Intel i7", "ram": "16GB"}}'),
    ('Smartphone', '{"brand": "Samsung", "price": 800, "specs": {"os": "Android", "storage": "128GB"}}');

1) A basic jsonb_path_query() function example

The following example uses the jsonb_path_query() function to retrieve the brand and price of all products:

SELECT jsonb_path_query(attributes, '$.brand') AS brand,
       jsonb_path_query(attributes, '$.price') AS price
FROM products;

Output:

brand   | price
-----------+-------
 "Dell"    | 1200
 "Samsung" | 800
(2 rows)

2) More complex JSON path example

The following example uses the jsonb_path_query() function to query nested attributes such as retrieving the CPU specification of laptops:

SELECT jsonb_path_query(attributes, '$.specs.cpu') AS cpu
FROM products;

Output:

cpu
------------
 "Intel i7"
(1 row)

Summary

  • Use the jsonb_path_query() function to query JSONB data based on JSON path expressions.

Last updated on

Was this page helpful?