w3resource

SQLite JSON vs PostgreSQL JSONB Compare Storage & Querying


SQLite JSONB: Advanced JSON Storage and Querying

SQLite, while a lightweight database, supports JSON functionalities via the json1 extension. However, unlike PostgreSQL's JSONB, which stores JSON data in a binary format optimized for querying, SQLite stores JSON data as plain text. Despite this difference, SQLite's JSON support enables developers to store and query structured JSON data efficiently, making it suitable for lightweight applications.

This guide explains SQLite's JSON capabilities, highlights the differences from PostgreSQL's JSONB, and provides examples of storing and querying JSON data.


What is JSONB in Databases?

JSONB (JSON Binary) is a data type used in PostgreSQL to store JSON data in a binary format. It offers faster query performance and reduced storage overhead compared to plain text JSON. SQLite does not have a native JSONB equivalent but provides powerful JSON functions through the json1 extension.


SQLite JSON1 Extension

SQLite's json1 extension includes a set of functions to work with JSON data, allowing you to:

    1. Parse JSON data.

    2. Query JSON properties.

    3. Modify JSON objects.

Key JSON Functions in SQLite

  • json(): Ensures a valid JSON value.
  • json_extract(): Extracts a specific value from a JSON object.
  • json_set(): Modifies a JSON object.
  • json_array(): Creates a JSON array.
  • json_object(): Creates a JSON object.

Example 1: Storing and Querying JSON Data in SQLite

Code:

-- Create a table to store JSON data
CREATE TABLE users (
  id INTEGER PRIMARY KEY,
  profile JSON
);

-- Insert a JSON object into the table
INSERT INTO users (profile) 
VALUES ('{"name": "Alice", "age": 30, "skills": ["SQL", "JavaScript"]}');

-- Query a specific property from the JSON object
SELECT json_extract(profile, '$.name') AS name 
FROM users;

-- Output: Alice

Explanation:

  • The CREATE TABLE statement defines a profile column to store JSON data.
  • The INSERT INTO statement inserts a JSON object.
  • json_extract() extracts the name field from the JSON data using the JSONPath syntax ($.name).

Example 2: Updating JSON Data

Code:

-- Update the JSON object to add a new skill
UPDATE users
SET profile = json_set(profile, '$.skills[2]', 'Python')
WHERE json_extract(profile, '$.name') = 'Alice';

-- Verify the update
SELECT json_extract(profile, '$.skills') AS skills 
FROM users;

-- Output: ["SQL", "JavaScript", "Python"]

Explanation:

  • json_set() modifies the skills array by adding a new skill (Python) at the third position.
  • The WHERE clause ensures the update applies to the correct record.

Comparison: SQLite JSON vs. PostgreSQL JSONB

Feature SQLite JSON PostgreSQL JSONB
Storage Format Plain Text Binary
Query Performance Slower for large datasets Optimized for queries
Indexing Limited indexing support GIN and JSON-specific indexes
Built-In Functions Basic JSON operations via json1 Advanced JSON manipulation
Use Case Lightweight applications Complex queries on large datasets

Advanced JSON Queries in SQLite

Code:

-- Create a table for nested JSON data
CREATE TABLE orders (
  id INTEGER PRIMARY KEY,
  order_details JSON
);

-- Insert a nested JSON object
INSERT INTO orders (order_details) 
VALUES ('{"order_id": 101, "items": [{"product": "Laptop", "price": 1000}, {"product": "Mouse", "price": 50}]}');

-- Query the price of the first item
SELECT json_extract(order_details, '$.items[0].price') AS first_item_price 
FROM orders;

-- Output: 1000

Explanation:

  • The order_details column stores nested JSON objects.
  • The JSONPath syntax ($.items[0].price) accesses the price of the first item in the items array.

Advantages of Using SQLite JSON

    1. Lightweight JSON Operations
    Ideal for local or embedded databases where simplicity is key.

    2. Readable Storage
    JSON data stored as plain text can be inspected and edited easily.

    3. Rich Functionality
    The json1 extension provides robust JSON processing capabilities.

    4. Seamless Integration
    Combines the simplicity of SQLite with JSON's flexibility for structured data.

When to Use SQLite for JSON

    1. Prototyping
    Quickly test ideas involving JSON data without setting up a complex database system.

    2. Local Applications
    Store and manage JSON data in lightweight desktop or mobile apps.

    3. Small to Medium Datasets
    Efficiently handle moderate volumes of JSON data without needing the advanced capabilities of PostgreSQL.

Practical Guides to SQLite Snippets and Examples.



Become a Patron!

Follow us on Facebook and Twitter for latest update.

It will be nice if you may share this link in any developer community or anywhere else, from where other developers may find this content. Thanks.

https://w3resource.com/sqlite/snippets/sqlite-jsonb.php