Bird
Raised Fist0
PostgreSQLquery~20 mins

Extensions (pg_trgm, uuid-ossp, hstore) in PostgreSQL - Practice Problems & Coding Challenges

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Challenge - 5 Problems
🎖️
Extension Mastery Badge
Get all challenges correct to earn this badge!
Test your skills under time pressure!
query_result
intermediate
2:00remaining
Using pg_trgm to find similar words
Given a table products with a column name, which query will return product names similar to 'apple' using the pg_trgm extension?
PostgreSQL
SELECT name FROM products WHERE name % 'apple';
ASELECT name FROM products WHERE name % 'apple';
BSELECT name FROM products WHERE similarity(name, 'apple') > 0.3;
CSELECT name FROM products WHERE name LIKE '%apple%';
DSELECT name FROM products WHERE name = 'apple';
Attempts:
2 left
💡 Hint
The pg_trgm extension provides the % operator for similarity search.
📝 Syntax
intermediate
1:30remaining
Correct syntax to generate a UUID using uuid-ossp
Which of the following SQL statements correctly generates a version 4 UUID using the uuid-ossp extension?
ASELECT generate_uuid_v4();
BSELECT uuid_generate_v4();
CSELECT uuid_v4_generate();
DSELECT generate_v4_uuid();
Attempts:
2 left
💡 Hint
The uuid-ossp extension provides functions starting with 'uuid_generate_'.
query_result
advanced
2:30remaining
Querying hstore data for a specific key
Given a table settings with a column config of type hstore, which query returns all rows where the key 'theme' has the value 'dark'?
ASELECT * FROM settings WHERE config ->> 'theme' = 'dark';
BSELECT * FROM settings WHERE config -> 'theme' = 'dark';
CSELECT * FROM settings WHERE config['theme'] = 'dark';
DSELECT * FROM settings WHERE config @> 'theme=>dark';
Attempts:
2 left
💡 Hint
The @> operator checks if the hstore contains a key-value pair.
optimization
advanced
2:30remaining
Improving search performance with pg_trgm
You want to speed up similarity searches on the description column of a documents table using pg_trgm. Which index type is best to create?
ACREATE INDEX trgm_idx ON documents USING gist (description gist_trgm_ops);
BCREATE INDEX trgm_idx ON documents USING btree (description);
CCREATE INDEX trgm_idx ON documents USING gin (description gin_trgm_ops);
DCREATE INDEX trgm_idx ON documents USING hash (description);
Attempts:
2 left
💡 Hint
pg_trgm works best with GIN or GiST indexes using gin_trgm_ops or gist_trgm_ops.
🔧 Debug
expert
3:00remaining
Debugging hstore key retrieval error
You run this query: SELECT config ->> 'language' FROM settings; but get an error: operator does not exist: hstore ->> unknown. What is the cause?
PostgreSQL
SELECT config ->> 'language' FROM settings;
AThe hstore extension is not enabled in the database.
BThe ->> operator is not defined for hstore; use -> instead.
CThe config column is not of type hstore but json or jsonb.
DThe ->> operator requires the key to be cast to text explicitly.
Attempts:
2 left
💡 Hint
Check if the hstore extension is installed and enabled.

Practice

(1/5)
1. What is the main purpose of the pg_trgm extension in PostgreSQL?
easy
A. To generate unique identifiers automatically
B. To store key-value pairs in a single column
C. To speed up text similarity and search operations
D. To manage user permissions and roles

Solution

  1. Step 1: Understand the role of pg_trgm

    The pg_trgm extension provides functions and operators for determining the similarity of text based on trigram matching.
  2. Step 2: Match purpose with options

    Among the options, only speeding up text similarity and search operations matches pg_trgm's purpose.
  3. Final Answer:

    To speed up text similarity and search operations -> Option C
  4. Quick Check:

    pg_trgm = text similarity speedup [OK]
Hint: Remember: pg_trgm is about text similarity and search [OK]
Common Mistakes:
  • Confusing pg_trgm with uuid-ossp for ID generation
  • Thinking hstore is for text search
  • Assuming pg_trgm manages permissions
2. Which of the following is the correct SQL command to enable the uuid-ossp extension in PostgreSQL?
easy
A. CREATE EXTENSION uuid-ossp;
B. ENABLE EXTENSION uuid-ossp;
C. INSTALL EXTENSION uuid-ossp;
D. ADD EXTENSION uuid-ossp;

Solution

  1. Step 1: Recall the syntax to enable extensions

    In PostgreSQL, extensions are enabled using the command CREATE EXTENSION extension_name;.
  2. Step 2: Verify the correct command for uuid-ossp

    The correct command is CREATE EXTENSION uuid-ossp;. Other options are invalid SQL syntax.
  3. Final Answer:

    CREATE EXTENSION uuid-ossp; -> Option A
  4. Quick Check:

    Enable extension = CREATE EXTENSION [OK]
Hint: Use CREATE EXTENSION to enable PostgreSQL extensions [OK]
Common Mistakes:
  • Using ENABLE or INSTALL instead of CREATE
  • Forgetting the semicolon at the end
  • Trying to add extension with ADD keyword
3. Given the following SQL commands, what will be the output of the last SELECT?
CREATE EXTENSION IF NOT EXISTS hstore;
SELECT 'a=>1, b=>2'::hstore -> 'a' AS value_a;
medium
A. Syntax error
B. 1
C. NULL
D. '1'

Solution

  1. Step 1: Understand hstore key-value retrieval

    The operator -> when used with hstore returns the value as type hstore, which is text but includes quotes in output.
  2. Step 2: Analyze the given hstore and query

    The hstore contains keys 'a' and 'b' with values '1' and '2' as text. Selecting -> 'a' returns the value as text with quotes, so output is '1'.
  3. Final Answer:

    '1' -> Option D
  4. Quick Check:

    hstore -> key returns quoted text value [OK]
Hint: hstore -> key returns text value shown quoted [OK]
Common Mistakes:
  • Thinking output is unquoted 1
  • Confusing -> with ->> operator
  • Assuming NULL if key exists
4. You run the following command but get an error:
CREATE EXTENSION uuid-ossp;
What is the most likely cause and how to fix it?
medium
A. Extension is already installed; use DROP EXTENSION first
B. You lack superuser rights; ask admin to enable it
C. Syntax error; command should be ENABLE EXTENSION uuid-ossp;
D. Extension not supported in PostgreSQL

Solution

  1. Step 1: Understand permissions for creating extensions

    Creating extensions like uuid-ossp requires superuser privileges in PostgreSQL.
  2. Step 2: Identify cause of error

    If you get an error running CREATE EXTENSION uuid-ossp;, it is likely due to insufficient permissions, not syntax or availability.
  3. Final Answer:

    You lack superuser rights; ask admin to enable it -> Option B
  4. Quick Check:

    CREATE EXTENSION needs superuser [OK]
Hint: CREATE EXTENSION needs superuser rights [OK]
Common Mistakes:
  • Assuming syntax error instead of permission issue
  • Trying to DROP extension before creating
  • Thinking extension is unsupported
5. You want to store user preferences as flexible key-value pairs in a PostgreSQL table. Which extension should you use and how do you insert a row with preferences for 'theme' as 'dark' and 'notifications' as 'enabled'?
hard
A. Use hstore; INSERT INTO users (prefs) VALUES ('"theme"=>"dark", "notifications"=>"enabled"');
B. Use uuid-ossp; INSERT INTO users (prefs) VALUES (uuid_generate_v4());
C. Use pg_trgm; INSERT INTO users (prefs) VALUES ('dark notifications');
D. Use hstore; INSERT INTO users (prefs) VALUES ('theme:dark, notifications:enabled');

Solution

  1. Step 1: Identify extension for flexible key-value storage

    The hstore extension allows storing key-value pairs in one column, perfect for user preferences.
  2. Step 2: Understand correct hstore insertion syntax

    hstore literals use the format '"key"=>"value"' pairs separated by commas inside single quotes.
  3. Step 3: Match correct insertion command

    Use hstore; INSERT INTO users (prefs) VALUES ('"theme"=>"dark", "notifications"=>"enabled"'); uses correct hstore syntax for inserting preferences. Use hstore; INSERT INTO users (prefs) VALUES ('theme:dark, notifications:enabled'); uses incorrect syntax, and others use wrong extensions.
  4. Final Answer:

    Use hstore; INSERT INTO users (prefs) VALUES ('"theme"=>"dark", "notifications"=>"enabled"'); -> Option A
  5. Quick Check:

    hstore key=>value pairs need quotes and => [OK]
Hint: hstore stores key=>value pairs with quotes [OK]
Common Mistakes:
  • Using uuid-ossp or pg_trgm for key-value storage
  • Incorrect hstore syntax without => or quotes
  • Confusing colon syntax with hstore format