Bird
Raised Fist0
PostgreSQLquery~5 mins

Path extraction with #> and #>> in PostgreSQL - Time & Space Complexity

Choose your learning style10 modes available
Time Complexity: Path extraction with #> and #>>
O(n)
Understanding Time Complexity

We want to understand how the time to extract data from JSON grows as the JSON gets bigger.

Specifically, how does using #> and #>> operators affect performance when accessing nested data?

Scenario Under Consideration

Analyze the time complexity of the following PostgreSQL JSON path extraction queries.


SELECT data #> '{a,b,c}' AS value1 FROM json_table;
SELECT data #>> '{a,b,c}' AS value2 FROM json_table;
    

These queries extract nested values from a JSON column using path operators.

Identify Repeating Operations

Identify the loops, recursion, array traversals that repeat.

  • Primary operation: Traversing the JSON structure along the given path keys.
  • How many times: Once per row, and once per key in the path (each key leads to next nested level).
How Execution Grows With Input

The time grows with the length of the path and the size of the JSON at each level.

Input Size (path length n)Approx. Operations
33 steps to reach nested value
55 steps to reach nested value
1010 steps to reach nested value

Pattern observation: The number of steps grows linearly with the path length.

Final Time Complexity

Time Complexity: O(n)

This means the time to extract a value grows linearly with the number of keys in the path.

Common Mistake

[X] Wrong: "Extracting a nested JSON value is always constant time regardless of path length."

[OK] Correct: Each key in the path requires looking inside the JSON at that level, so longer paths take more steps.

Interview Connect

Understanding how JSON path extraction scales helps you write efficient queries and explain performance trade-offs clearly.

Self-Check

What if the JSON data is deeply nested but the path length is short? How would the time complexity change?

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

  1. Step 1: Understand the operator #>

    This operator extracts JSON data from a JSON column or value at the given path as JSON type.
  2. Step 2: Compare with similar operator #>>

    The #>> operator extracts text, not JSON, at the path.
  3. Final Answer:

    Extracts JSON data at a specified path -> Option C
  4. 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

  1. Step 1: Understand #>> syntax

    The #>> operator requires a text array path inside curly braces, e.g., '{name}', to extract text.
  2. Step 2: Compare with other operators

    ->> extracts text but uses a different syntax without braces; #> extracts JSON, not text.
  3. Final Answer:

    SELECT data #>> '{name}' FROM table; -> Option B
  4. 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

  1. Step 1: Understand the JSON and path

    The JSON has a nested object under 'person' with key 'name' having value "Alice".
  2. Step 2: Apply #>> operator

    #>> extracts the text value at the path, so it returns the string without quotes.
  3. Final Answer:

    Alice -> Option A
  4. 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

  1. Step 1: Understand NULL from JSON path extraction

    If the specified path does not exist in the JSON data, the operator returns NULL.
  2. Step 2: Check other options

    The syntax is correct; #>> is valid for text extraction; invalid JSON would cause errors, not NULL.
  3. Final Answer:

    The path '{address,city}' does not exist in some JSON rows -> Option A
  4. 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

  1. Step 1: Understand the nested JSON path

    The email is nested under keys user, details, then email.
  2. Step 2: Use correct operator and path syntax

    #>> extracts text and requires path as an array in braces: '{user,details,email}'.
  3. 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.
  4. Final Answer:

    SELECT profile #>> '{user,details,email}' FROM accounts; -> Option D
  5. 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 unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard