Character types (char, varchar, text) in PostgreSQL - Time & Space Complexity
When working with character types in PostgreSQL, it's important to understand how the time to process text grows as the text length increases.
We want to know how the size of the text affects the time it takes to store or retrieve it.
Analyze the time complexity of inserting and selecting character data.
INSERT INTO users (username) VALUES ('example_user');
SELECT username FROM users WHERE username = 'example_user';
This code inserts a username and then retrieves it by exact match.
Look at what repeats when handling character data.
- Primary operation: Comparing or copying each character in the string.
- How many times: Once for each character in the string during insert or search.
As the length of the text grows, the time to process it grows too.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 characters | 10 operations |
| 100 characters | 100 operations |
| 1000 characters | 1000 operations |
Pattern observation: The time grows directly with the number of characters.
Time Complexity: O(n)
This means the time to process text grows in a straight line with the length of the text.
[X] Wrong: "Processing fixed-length char types is always faster than varchar or text regardless of length."
[OK] Correct: While fixed-length char pads spaces, the time to handle each character still grows with length, so longer strings take more time no matter the type.
Understanding how text length affects processing time helps you explain database performance clearly and confidently in real situations.
"What if we added an index on the varchar column? How would that change the time complexity of searching by username?"
Practice
Solution
Step 1: Understand fixed-length storage
CHAR(n) stores exactly n characters, padding with spaces if input is shorter.Step 2: Compare with other types
VARCHAR(n) stores variable length up to n, TEXT has no limit, INT is numeric.Final Answer:
CHAR(n) -> Option AQuick Check:
Fixed length with padding = CHAR(n) [OK]
- Confusing VARCHAR(n) as fixed length
- Thinking TEXT has length limit
- Choosing numeric types by mistake
Solution
Step 1: Identify variable-length syntax
VARCHAR(n) declares variable-length text with max n characters.Step 2: Check other options
CHAR(50) is fixed length, TEXT has no length limit, STRING is invalid in PostgreSQL.Final Answer:
VARCHAR(50) -> Option BQuick Check:
Variable length with max limit = VARCHAR(n) [OK]
- Using TEXT with length limit (invalid)
- Confusing CHAR as variable length
- Using non-existent STRING type
CREATE TABLE users (name CHAR(5));
INSERT INTO users VALUES ('Tom');
SELECT name, LENGTH(name) FROM users;What will be the output of the SELECT query?
Solution
Step 1: Understand CHAR(5) behavior on insert
CHAR(5) pads 'Tom' with 2 spaces to make length 5.Step 2: LENGTH function counts all characters including spaces
LENGTH('Tom ') returns 5 because spaces count.Final Answer:
name = 'Tom ', length = 5 -> Option AQuick Check:
CHAR pads spaces, LENGTH counts them [OK]
- Assuming LENGTH ignores trailing spaces
- Thinking CHAR stores variable length
- Confusing CHAR with VARCHAR behavior
Solution
Step 1: Understand VARCHAR(n) length limit enforcement
VARCHAR(10) limits input to 10 characters strictly.Step 2: Behavior on exceeding length
PostgreSQL raises an error if input exceeds declared length.Final Answer:
An error is raised and insertion fails -> Option CQuick Check:
Exceeding VARCHAR limit causes error [OK]
- Assuming automatic truncation happens
- Thinking VARCHAR pads with spaces
- Believing PostgreSQL ignores length limits
Solution
Step 1: Identify requirement for unlimited length
User comments can be very long, so no fixed or limited length is suitable.Step 2: Compare data types for length limits
TEXT stores variable-length text with no size limit, unlike CHAR or VARCHAR.Step 3: Exclude irrelevant types
INT is numeric and unsuitable for text storage.Final Answer:
TEXT, because it stores variable-length text with no size limit -> Option DQuick Check:
No size limit needed = TEXT [OK]
- Choosing CHAR or VARCHAR with fixed limits
- Confusing numeric types with text
- Assuming VARCHAR can store unlimited text
Ready to prove it?
Pass the test and this pattern moves unknown
