PostgreSQL jsonb_path_exists() Function
Summary: in this tutorial, you will learn how to use the PostgreSQL jsonb_path_exists()
function to check if a JSON path returns any item for a specified JSON document.
Introduction to the PostgreSQL jsonb_path_exists() function
The jsonb_path_exists()
function allows you to check if a JSON path matches any element in a JSON document.
Here’s the syntax of the jsonb_path_exists()
function:
jsonb_path_exists(jsonb_data, json_path)
In this syntax:
jsonb_data
is a JSON document where you want to check for a JSON path.json_path
is the path that you want to check.
The jsonb_path_exists()
function returns true if the json_path
returns any elements in the jsonb_data
document or false otherwise.
PostgreSQL jsonb_path_exists() function example
Let’s take some examples of using the jsonb_path_exists()
function.
Setting up a sample table
First, create a new table called products
that store product information:
CREATE TABLE products (
id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
attributes JSONB
);
The products
table has the attributes
column whose data type is JSONB
.
Second, insert 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"}}')
RETURNING *;
Output:
id | name | attributes
----+------------+------------------------------------------------------------------------------------
1 | Laptop | {"brand": "Dell", "price": 1200, "specs": {"cpu": "Intel i7", "ram": "16GB"}}
2 | Smartphone | {"brand": "Samsung", "price": 800, "specs": {"os": "Android", "storage": "128GB"}}
(2 rows)
1) Basic jsonb_path_exists() function example
The following example uses the jsonb_path_exists()
function to check whether the CPU specification exists for any product:
SELECT name,
jsonb_path_exists(attributes, '$.specs.cpu') AS cpu_exists
FROM products;
Output:
name | cpu_exists
------------+------------
Laptop | t
Smartphone | f
(2 rows)
2) Using the jsonb_path_exists() function in the WHERE clause
The following example uses the jsonb_path_exists()
function with the jsonb_path_query()
function to retrieve the CPU
specification of any products that have CPU
spec:
SELECT jsonb_path_query(attributes, '$.specs.cpu') AS cpu
FROM products
WHERE jsonb_path_exists(attributes, '$.specs.cpu');
Output:
cpu
------------
"Intel i7"
(1 row)
Summary
- Use the
jsonb_path_exists()
function to check the existence of JSON Path expressions within JSONB data