📖 Scenario: You are working on a small online bookstore database. You want to store book details in a table using JSON format to keep the data flexible and easy to update.
🎯 Goal: Create a table to store book information as JSON data, then insert a JSON record representing a book into the table.
📋 What You'll Learn
Create a table named books with a column info of type jsonb
Insert a JSON record into the books table with specific book details
Use exact JSON keys and values as specified
💡 Why This Matters
🌍 Real World
Storing flexible and complex data like book details in JSON format allows easy updates and schema changes without altering the database structure.
💼 Career
Many modern applications use JSON data types in databases like PostgreSQL to handle semi-structured data efficiently, a valuable skill for backend developers and database administrators.
Progress0 / 4 steps
1
Create the books table with a jsonb column
Write a SQL statement to create a table called books with one column named info of type jsonb.
PostgreSQL
Hint
Use CREATE TABLE books (info jsonb); to create the table.
2
Prepare the JSON data for insertion
Create a variable called book_json that holds the JSON data as a string with these exact key-value pairs: {"title": "The Great Gatsby", "author": "F. Scott Fitzgerald", "year": 1925}.
PostgreSQL
Hint
Use \set book_json '{"title": "The Great Gatsby", "author": "F. Scott Fitzgerald", "year": 1925}' to define the JSON string variable.
3
Insert the JSON data into the books table
Write an INSERT statement to add the JSON data stored in book_json into the info column of the books table. Use the ::jsonb cast to convert the string to JSONB.
PostgreSQL
Hint
Use INSERT INTO books (info) VALUES (:book_json::jsonb); to insert the JSON data.
4
Verify the JSON data insertion
Write a SELECT statement to retrieve all rows from the books table to confirm the JSON data was inserted correctly.
PostgreSQL
Hint
Use SELECT * FROM books; to see the inserted JSON data.
Practice
(1/5)
1. What is the correct way to insert JSON data into a PostgreSQL table with a json column named data?
easy
A. INSERT INTO table_name (data) VALUES (JSON('name: John, age: 30'));
B. INSERT INTO table_name (data) VALUES ({name: 'John', age: 30});
C. INSERT INTO table_name (data) VALUES ("{'name': 'John', 'age': 30}");
D. INSERT INTO table_name (data) VALUES ('{"name": "John", "age": 30}');
Solution
Step 1: Use single quotes for JSON string in SQL
In PostgreSQL, JSON data must be enclosed in single quotes as a string literal.
Step 2: Use valid JSON format inside the string
The JSON must have double quotes around keys and string values, like {"name": "John", "age": 30}.
Final Answer:
INSERT INTO table_name (data) VALUES ('{"name": "John", "age": 30}'); -> Option D
Quick Check:
JSON string with single quotes and double quotes inside = D [OK]
Hint: Always use single quotes around JSON string in SQL [OK]
Common Mistakes:
Using double quotes for the whole JSON string
Using unquoted keys or single quotes inside JSON
Trying to insert JSON without quotes
2. Which of the following is the correct syntax to insert JSON data into a table named users with a jsonb column info?
easy
A. INSERT INTO users (info) VALUES (jsonb '{"city": "NY", "zip": 10001}');
B. INSERT INTO users (info) VALUES ('{city: "NY", zip: 10001}');
C. INSERT INTO users (info) VALUES ("{'city': 'NY', 'zip': 10001}");
D. INSERT INTO users (info) VALUES (jsonb '{city: NY, zip: 10001}');
Solution
Step 1: Use jsonb type cast for jsonb columns
When inserting into a jsonb column, you can cast the string to jsonb using jsonb '...' .
Step 2: Use valid JSON string with double quotes inside single quotes
The JSON must be valid with double quotes around keys and string values.
Final Answer:
INSERT INTO users (info) VALUES (jsonb '{"city": "NY", "zip": 10001}'); -> Option A
Quick Check:
jsonb cast with valid JSON string = C [OK]
Hint: Cast JSON string to jsonb with jsonb '...' for jsonb columns [OK]
Common Mistakes:
Using double quotes for the whole JSON string
Not casting to jsonb when required
Using invalid JSON format without quotes
3. Given the table products with a json column details, what will be the result of this query?
INSERT INTO products (details) VALUES ('{"color": "red", "size": "M"}'); SELECT details->>'color' FROM products WHERE details->>'size' = 'M';
medium
A. ["M"]
B. [null]
C. ["red"]
D. Empty result
Solution
Step 1: Insert JSON with color and size keys
The insert adds a row with details containing color: red and size: M.
Step 2: Select color where size equals 'M'
The SELECT filters rows where details->>'size' = 'M' and returns details->>'color', which is 'red'.
Final Answer:
["red"] -> Option C
Quick Check:
Filter by size 'M' returns color 'red' [OK]
Hint: Use ->> to get JSON text value for filtering and selecting [OK]
Common Mistakes:
Using -> instead of ->> returns JSON, not text
Expecting size value instead of color in output
Not matching the filter condition correctly
4. You try to insert JSON data with this query:
INSERT INTO orders (info) VALUES ('{customer: "Alice", total: 50}');
But it fails. What is the error and how to fix it?
medium
A. Using double quotes inside JSON string; fix by using single quotes inside JSON.
B. Missing double quotes around JSON keys; fix by adding double quotes around keys.
C. JSON keys must be unquoted; fix by removing all quotes.
D. JSON must be cast to jsonb; fix by adding ::jsonb after string.
Solution
Step 1: Identify invalid JSON format
JSON keys must be in double quotes, but here keys are unquoted (customer, total).
Step 2: Fix JSON by adding double quotes around keys
Correct JSON is '{"customer": "Alice", "total": 50}'.
Final Answer:
Missing double quotes around JSON keys; fix by adding double quotes around keys. -> Option B
Quick Check:
JSON keys need double quotes = A [OK]
Hint: JSON keys must always be double-quoted strings [OK]
Common Mistakes:
Using unquoted keys in JSON
Mixing single and double quotes incorrectly
Assuming casting fixes invalid JSON format
5. You want to insert multiple JSON objects into a table events with a jsonb column payload. Which query correctly inserts two JSON objects in one statement?
hard
A. INSERT INTO events (payload) VALUES (jsonb '{"type": "click", "x": 10}'), (jsonb '{"type": "scroll", "y": 20}');
B. INSERT INTO events (payload) VALUES '[{"type": "click", "x": 10}, {"type": "scroll", "y": 20}]';
C. INSERT INTO events (payload) VALUES (jsonb '[{"type": "click", "x": 10}, {"type": "scroll", "y": 20}]');
D. INSERT INTO events (payload) VALUES (jsonb '{type: click, x: 10}'), (jsonb '{type: scroll, y: 20}');
Solution
Step 1: Insert multiple rows with separate JSON objects
Use multiple VALUES tuples, each with a valid JSON string cast to jsonb.
Step 2: Ensure JSON keys and strings are double-quoted
Each JSON object must have keys and string values in double quotes inside single quotes.
Final Answer:
INSERT INTO events (payload) VALUES (jsonb '{"type": "click", "x": 10}'), (jsonb '{"type": "scroll", "y": 20}'); -> Option A
Quick Check:
Multiple rows with valid JSON objects = A [OK]
Hint: Use multiple VALUES tuples with jsonb cast for multiple JSON inserts [OK]
Common Mistakes:
Trying to insert JSON array as one JSON object
Using invalid JSON without quotes
Not casting JSON string to jsonb when required
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.