Gets the JSON value of the city inside the address object.
PostgreSQL
SELECT data #> '{address,city}'FROM users;
Gets the city as plain text from the JSON data.
PostgreSQL
SELECT data #>> '{address,city}'FROM users;
Gets the first phone number object from the phones array.
PostgreSQL
SELECT data #> '{phones,0}'FROM users;
Sample Program
This example creates a table with JSON data about users. It shows how to get the city from the address as JSON and text, and how to get the first phone number from the phones array.
PostgreSQL
CREATETABLE users (id SERIALPRIMARYKEY, data JSONB);
INSERTINTO users (data) VALUES
('{"name": "Alice", "address": {"city": "Wonderland", "zip": "12345"}, "phones": ["123-4567", "987-6543"]}'),
('{"name": "Bob", "address": {"city": "Builderland", "zip": "54321"}, "phones": ["555-0000"]}');
-- Extract city as JSONSELECT id, data #> '{address,city}'AS city_json FROM users ORDERBY id;
-- Extract city as textSELECT id, data #>> '{address,city}'AS city_text FROM users ORDERBY id;
-- Extract first phone number as JSONSELECT id, data #> '{phones,0}'AS first_phone_json FROM users ORDERBY id;
OutputSuccess
Important Notes
Use curly braces with commas to specify the path inside the JSON.
#> keeps the JSON format, #>> converts the result to plain text.
Array indexes start at 0 when accessing JSON arrays.
Summary
#> extracts JSON data at a path.
#>> extracts text at a path.
Both help read nested JSON easily in PostgreSQL.
Practice
(1/5)
1. What does the PostgreSQL operator #> do when used with JSON data?
easy
A. Deletes JSON data at a specified path
B. Extracts text at a specified path
C. Extracts JSON data at a specified path
D. Updates JSON data at a specified path
Solution
Step 1: Understand the operator #>
This operator extracts JSON data from a JSON column or value at the given path as JSON type.
Step 2: Compare with similar operator #>>
The #>> operator extracts text, not JSON, at the path.
Final Answer:
Extracts JSON data at a specified path -> Option C
Quick Check:
#> extracts JSON data [OK]
Hint: Remember #> returns JSON, #>> returns text [OK]
Common Mistakes:
Confusing #> with #>>
Thinking #> extracts text
Assuming #> modifies JSON
2. Which of the following is the correct syntax to extract the text value of the key 'name' from a JSON column data using the #>> operator?
easy
A. SELECT data->'name' FROM table;
B. SELECT data #>> '{name}' FROM table;
C. SELECT data->>'name' FROM table;
D. SELECT data #> '{name}' FROM table;
Solution
Step 1: Understand #>> syntax
The #>> operator requires a text array path inside curly braces, e.g., '{name}', to extract text.
Step 2: Compare with other operators
->> extracts text but uses a different syntax without braces; #> extracts JSON, not text.
Final Answer:
SELECT data #>> '{name}' FROM table; -> Option B
Quick Check:
Correct syntax for #>> uses braces and returns text [OK]
Hint: Use braces '{}' with #>> for text extraction [OK]
Common Mistakes:
Using #> instead of #>> for text extraction
Omitting braces around path
Confusing ->> with #>> syntax
3. Given the JSON column info with value '{"person": {"name": "Alice", "age": 30}}', what is the result of the query: SELECT info #>> '{person,name}' FROM users;
medium
A. Alice
B. "Alice"
C. {"name": "Alice"}
D. NULL
Solution
Step 1: Understand the JSON and path
The JSON has a nested object under 'person' with key 'name' having value "Alice".
Step 2: Apply #>> operator
#>> extracts the text value at the path, so it returns the string without quotes.
Final Answer:
Alice -> Option A
Quick Check:
#>> returns text without quotes [OK]
Hint: Text extraction returns unquoted string [OK]
Common Mistakes:
Expecting JSON with quotes returned
Confusing #> and #>> output types
Assuming NULL if nested path
4. Consider the query: SELECT data #>> '{address,city}' FROM customers; If this query returns NULL unexpectedly, what is the most likely cause?
medium
A. The path '{address,city}' does not exist in some JSON rows
B. The operator #>> is used incorrectly and should be #>
C. The JSON column is not valid JSON format
D. The query syntax is invalid
Solution
Step 1: Understand NULL from JSON path extraction
If the specified path does not exist in the JSON data, the operator returns NULL.
Step 2: Check other options
The syntax is correct; #>> is valid for text extraction; invalid JSON would cause errors, not NULL.
Final Answer:
The path '{address,city}' does not exist in some JSON rows -> Option A
Quick Check:
Missing path returns NULL [OK]
Hint: NULL means path missing, not syntax error [OK]
Common Mistakes:
Assuming syntax error causes NULL
Confusing #> and #>> usage
Ignoring missing keys in JSON
5. You have a JSON column profile with nested data: {"user": {"details": {"email": "user@example.com", "phone": "12345"}}} Which query correctly extracts the email as text using the #>> operator?
hard
A. SELECT profile #>> 'user.details.email' FROM accounts;
B. SELECT profile #> '{user,details,email}' FROM accounts;
C. SELECT profile->'user'->'details'->>'email' FROM accounts;
D. SELECT profile #>> '{user,details,email}' FROM accounts;
Solution
Step 1: Understand the nested JSON path
The email is nested under keys user, details, then email.
Step 2: Use correct operator and path syntax
#>> extracts text and requires path as an array in braces: '{user,details,email}'.
Step 3: Evaluate other options
#> returns JSON, not text; SELECT profile->'user'->'details'->>'email' FROM accounts; uses different operators but is valid syntax; SELECT profile #>> 'user.details.email' FROM accounts; uses incorrect path format.
Final Answer:
SELECT profile #>> '{user,details,email}' FROM accounts; -> Option D
Quick Check:
Use #>> with array path in braces for text extraction [OK]
Hint: Use braces with comma-separated keys for #>> path [OK]
Common Mistakes:
Using dot notation inside quotes for path
Using #> instead of #>> for text
Confusing operator syntax with -> and ->>
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.