Bird
Raised Fist0
PostgreSQLquery~10 mins

Arrow operators (-> and ->>) in PostgreSQL - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Arrow operators (-> and ->>)
Start with JSON column
↓
Use -> operator
↓
Extract JSON object or array element
↓
Use ->> operator
↓
Extract JSON text value
↓
Use extracted value in query or output
The flow shows how to start with a JSON column, use -> to get JSON objects or arrays, and ->> to get text values from JSON.
Execution Sample
PostgreSQL
SELECT data->'name' AS name_json, data->>'name' AS name_text
FROM people;
This query extracts the 'name' field from a JSON column 'data' as JSON and as text.
Execution Table
StepExpressionEvaluationResult
1data->'name'Extract JSON value for key 'name'{"first": "John", "last": "Doe"}
2data->>'name'Extract text value for key 'name'{"first": "John", "last": "Doe"}
3data->'age'Extract JSON value for key 'age'30
4data->>'age'Extract text value for key 'age'30
5data->'contacts'->0Extract first element of 'contacts' array{"type": "email", "value": "john@example.com"}
6data->'contacts'->0->>'value'Extract text value of 'value' in first contactjohn@example.com
7End of rowsNo more data to extractQuery returns all rows with these extracted values
💡 All JSON arrow extractions completed for each row in the table.
Variable Tracker
VariableStartAfter Step 1After Step 2After Step 5After Step 6Final
data{"name": {"first": "John", "last": "Doe"}, "age": 30, "contacts": [{"type": "email", "value": "john@example.com"}]}{"first": "John", "last": "Doe"}{"first": "John", "last": "Doe"}{"type": "email", "value": "john@example.com"}john@example.comUsed in output columns
Key Moments - 2 Insights
Why does data->'name' return JSON but data->>'name' returns text?
The -> operator returns the JSON object or array as is (see execution_table step 1), while ->> returns the text inside that JSON value (see step 2).
Can ->> be used to extract nested values directly?
No, ->> extracts text only at one level. To get nested text, combine -> to go deeper, then ->> at the last step (see steps 5 and 6).
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table at step 2. What is the type of the result from data->>'name'?
AText string
BJSON object
CInteger
DArray
💡 Hint
Check the 'Evaluation' and 'Result' columns at step 2 in execution_table.
At which step does the query extract the first element of the 'contacts' array as JSON?
AStep 2
BStep 5
CStep 4
DStep 6
💡 Hint
Look for the step where data->'contacts'->0 is evaluated in execution_table.
If you want to get the text value of 'value' inside the first contact, which operator combination is used?
A-> only
B->> only
C-> then ->>
D->> then ->
💡 Hint
See steps 5 and 6 in execution_table for how nested extraction is done.
Concept Snapshot
Arrow operators in PostgreSQL JSON:
-> extracts JSON object or array element
->> extracts text value from JSON
Use -> for JSON output, ->> for plain text
Combine -> and ->> for nested extraction
Example: data->'key'->>'subkey'
Full Transcript
This visual execution shows how PostgreSQL arrow operators work with JSON data. The -> operator extracts JSON objects or arrays, while ->> extracts text values. For example, data->'name' returns a JSON object, but data->>'name' returns the text inside. Nested JSON values require combining -> and ->> operators. The execution table traces each step extracting values from a JSON column named data. Variable tracking shows how the data changes after each extraction. Key moments clarify common confusions about operator differences and nested extraction. The quiz tests understanding of operator results and usage. The snapshot summarizes the syntax and behavior for quick reference.

Practice

(1/5)
1. What does the PostgreSQL operator ->> do when used on a JSON column?
easy
A. Converts the entire JSON object to text
B. Extracts the value as JSON from a JSON object by key
C. Extracts the value as text from a JSON object by key
D. Deletes a key from the JSON object

Solution

  1. Step 1: Understand the ->> operator

    The ->> operator extracts the value of a key from a JSON object and returns it as plain text.
  2. Step 2: Compare with -> operator

    The -> operator returns the value as JSON, not text. So ->> is used when text output is needed.
  3. Final Answer:

    Extracts the value as text from a JSON object by key -> Option C
  4. Quick Check:

    ->> returns text [OK]
Hint: Remember: -> returns JSON, ->> returns text [OK]
Common Mistakes:
  • Confusing -> and ->> operators
  • Thinking ->> returns JSON instead of text
  • Assuming ->> deletes keys
2. Which of the following is the correct syntax to extract the JSON value of key 'name' as JSON from a column data in table users?
easy
A. SELECT data->>name FROM users;
B. SELECT data->>'name' FROM users;
C. SELECT data->name FROM users;
D. SELECT data->'name' FROM users;

Solution

  1. Step 1: Identify correct operator for JSON output

    To get the value as JSON, use -> with the key in single quotes.
  2. Step 2: Check syntax correctness

    Keys must be in quotes. Options C and D miss quotes around 'name'. SELECT data->>'name' FROM users; uses ->> which returns text, not JSON.
  3. Final Answer:

    SELECT data->'name' FROM users; -> Option D
  4. Quick Check:

    Use -> with quoted key for JSON [OK]
Hint: Use single quotes around keys with -> or ->> [OK]
Common Mistakes:
  • Omitting quotes around JSON keys
  • Using ->> when JSON output is needed
  • Using invalid syntax like ->name without quotes
3. Given the table products with a JSON column info containing {"price": 100, "details": {"color": "red"}}, what is the output of this query?
SELECT info->'details'->>'color' FROM products;
medium
A. red
B. NULL
C. { "color": "red" }
D. "red"

Solution

  1. Step 1: Understand nested arrow operators

    The first -> extracts the JSON object at key 'details'. The second ->> extracts the text value of 'color'.
  2. Step 2: Determine output format

    ->> returns text without quotes, so output is plain text 'red'.
  3. Final Answer:

    red -> Option A
  4. Quick Check:

    Nested -> and ->> extract text correctly [OK]
Hint: Use -> for JSON, ->> for text even in nested keys [OK]
Common Mistakes:
  • Expecting JSON output with ->>
  • Including quotes in text output
  • Confusing nested operator order
4. What is wrong with this query?
SELECT data->>details->>'color' FROM items;
medium
A. Missing quotes around 'details' key
B. Using ->> before -> causes syntax error
C. Cannot chain arrow operators
D. No JSON column named 'data'

Solution

  1. Step 1: Check key quoting in arrow operators

    Keys must be in single quotes. Here, 'details' is unquoted, causing error.
  2. Step 2: Confirm chaining is allowed

    Chaining -> and ->> is valid if keys are quoted properly.
  3. Final Answer:

    Missing quotes around 'details' key -> Option A
  4. Quick Check:

    Always quote keys in arrow operators [OK]
Hint: Always put keys in single quotes when using -> or ->> [OK]
Common Mistakes:
  • Forgetting quotes around JSON keys
  • Assuming ->> can be used before -> without quotes
  • Thinking chaining arrow operators is invalid
5. You have a table orders with a JSON column details storing nested JSON like {"customer": {"name": "Alice", "age": 30}}. Which query correctly extracts the customer's name as text?
hard
A. SELECT details->'customer'->'name' FROM orders;
B. SELECT details->'customer'->>'name' FROM orders;
C. SELECT details->>'customer'->>'name' FROM orders;
D. SELECT details->>'customer'->'name' FROM orders;

Solution

  1. Step 1: Extract nested JSON object first

    Use -> to get the 'customer' JSON object from 'details'.
  2. Step 2: Extract 'name' as text

    Use ->> on the 'name' key to get its value as text.
  3. Step 3: Analyze other options

    SELECT details->'customer'->'name' FROM orders; returns JSON, not text. SELECT details->>'customer'->>'name' FROM orders; uses ->> on 'customer' which returns text, so next ->> fails. SELECT details->>'customer'->'name' FROM orders; mixes operators incorrectly.
  4. Final Answer:

    SELECT details->'customer'->>'name' FROM orders; -> Option B
  5. Quick Check:

    Use -> then ->> for nested text extraction [OK]
Hint: Use -> for JSON object, then ->> for text key inside it [OK]
Common Mistakes:
  • Using ->> too early breaking JSON chain
  • Mixing operator order incorrectly
  • Expecting JSON output when text is needed
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard