Bird
Raised Fist0
PostgreSQLquery~5 mins

ENUM types in PostgreSQL - Cheat Sheet & Quick Revision

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
Recall & Review
beginner
What is an ENUM type in PostgreSQL?
An ENUM type is a special data type that allows you to define a list of allowed values. It helps to store only one of these predefined values in a column.
Click to reveal answer
beginner
How do you create an ENUM type in PostgreSQL?
Use the command: CREATE TYPE mood AS ENUM ('happy', 'sad', 'neutral'); This creates a new ENUM type named 'mood' with three allowed values.
Click to reveal answer
beginner
Can you insert a value not listed in an ENUM type column?
No, PostgreSQL will reject any value that is not one of the predefined ENUM values. This ensures data consistency.
Click to reveal answer
intermediate
How do you add a new value to an existing ENUM type?
Use ALTER TYPE mood ADD VALUE 'excited'; to add a new allowed value 'excited' to the ENUM type 'mood'.
Click to reveal answer
intermediate
Why use ENUM types instead of text columns?
ENUM types restrict values to a fixed set, preventing invalid data. They also use less storage and can improve query speed compared to text columns.
Click to reveal answer
Which command creates a new ENUM type in PostgreSQL?
ACREATE TABLE status ENUM ('open', 'closed');
BCREATE ENUM status ('open', 'closed');
CCREATE TYPE status AS ENUM ('open', 'closed');
DALTER TYPE status ADD ENUM ('open', 'closed');
What happens if you try to insert a value not in the ENUM list?
AThe value is converted to the closest ENUM value.
BThe value is inserted as NULL.
CThe value is automatically added to the ENUM list.
DPostgreSQL throws an error and rejects the insert.
How do you add a new value to an existing ENUM type?
AALTER TYPE mood ADD VALUE 'excited';
BCREATE TYPE mood ADD VALUE 'excited';
CUPDATE TYPE mood SET VALUE = 'excited';
DALTER TABLE mood ADD VALUE 'excited';
Which of these is NOT an advantage of ENUM types?
ARestricting column values to a fixed set.
BAutomatically updating ENUM values on insert.
CUsing less storage than text columns.
DImproving query speed for fixed sets.
What data type would you use to store a user's mood with fixed options?
AENUM
BINTEGER
CTEXT
DBOOLEAN
Explain what an ENUM type is and how it helps maintain data quality in PostgreSQL.
Think about how you limit choices in a form.
You got /4 concepts.
    Describe the steps to create an ENUM type and add a new value to it in PostgreSQL.
    Start with creating, then modifying the ENUM.
    You got /3 concepts.

      Practice

      (1/5)
      1. What is the main purpose of using ENUM types in PostgreSQL?
      easy
      A. To restrict a column to a fixed set of allowed values
      B. To store large text data efficiently
      C. To create temporary tables
      D. To index numeric columns faster

      Solution

      1. Step 1: Understand ENUM type purpose

        ENUM types define a list of allowed values for a column, ensuring data consistency.
      2. Step 2: Compare with other options

        Other options describe unrelated features like text storage, temporary tables, or indexing.
      3. Final Answer:

        To restrict a column to a fixed set of allowed values -> Option A
      4. Quick Check:

        ENUM = fixed allowed values [OK]
      Hint: ENUM limits values to a fixed list, ensuring consistency [OK]
      Common Mistakes:
      • Thinking ENUM stores large text data
      • Confusing ENUM with temporary tables
      • Assuming ENUM improves indexing speed
      2. Which of the following is the correct syntax to create an ENUM type named mood with values 'happy', 'sad', and 'neutral'?
      easy
      A. CREATE ENUM TYPE mood AS ('happy', 'sad', 'neutral');
      B. CREATE ENUM mood ('happy', 'sad', 'neutral');
      C. CREATE TYPE mood ENUM ['happy', 'sad', 'neutral'];
      D. CREATE TYPE mood AS ENUM ('happy', 'sad', 'neutral');

      Solution

      1. Step 1: Recall ENUM creation syntax

        The correct syntax is CREATE TYPE name AS ENUM (values); with values in parentheses and single quotes.
      2. Step 2: Check each option

        CREATE TYPE mood AS ENUM ('happy', 'sad', 'neutral'); matches the correct syntax exactly. Others have wrong keywords or brackets.
      3. Final Answer:

        CREATE TYPE mood AS ENUM ('happy', 'sad', 'neutral'); -> Option D
      4. Quick Check:

        CREATE TYPE ... AS ENUM (values) [OK]
      Hint: Use CREATE TYPE name AS ENUM (values) syntax [OK]
      Common Mistakes:
      • Using CREATE ENUM instead of CREATE TYPE
      • Using square brackets instead of parentheses
      • Omitting AS keyword
      3. Given the ENUM type and table below, what will be the result of the query?
      CREATE TYPE colors AS ENUM ('red', 'green', 'blue');
      CREATE TABLE items (id SERIAL PRIMARY KEY, color colors);
      INSERT INTO items (color) VALUES ('green'), ('blue'), ('red');
      
      SELECT color FROM items ORDER BY color;
      medium
      A. red, blue, green
      B. blue, green, red
      C. green, blue, red
      D. red, green, blue

      Solution

      1. Step 1: Understand ENUM ordering

        ENUM values are ordered by their declaration order: 'red' < 'green' < 'blue'.
      2. Step 2: Apply ORDER BY on color column

        Ordering by color sorts rows as per ENUM order, so 'red', 'green', 'blue'.
      3. Final Answer:

        red, green, blue -> Option A
      4. Quick Check:

        ENUM order = declaration order [OK]
      Hint: ENUM sorts by declared order, not alphabetically [OK]
      Common Mistakes:
      • Assuming alphabetical order instead of ENUM order
      • Confusing insertion order with sort order
      • Expecting default text sorting
      4. What is wrong with the following SQL code?
      CREATE TYPE status AS ENUM ('new', 'in_progress', 'done');
      CREATE TABLE tasks (
        id SERIAL PRIMARY KEY,
        task_status status DEFAULT 'pending'
      );
      medium
      A. ENUM types cannot be used as column types
      B. Missing semicolon after CREATE TYPE statement
      C. The default value 'pending' is not in the ENUM list
      D. The SERIAL keyword is deprecated

      Solution

      1. Step 1: Check ENUM values and default

        ENUM 'status' has values 'new', 'in_progress', 'done'. Default 'pending' is not listed.
      2. Step 2: Understand default value constraints

        Default must be one of ENUM values; otherwise, it causes an error.
      3. Final Answer:

        The default value 'pending' is not in the ENUM list -> Option C
      4. Quick Check:

        Default must be ENUM member [OK]
      Hint: Default must be one of ENUM values [OK]
      Common Mistakes:
      • Assuming any string can be default
      • Thinking ENUM can't be column type
      • Ignoring missing semicolon errors
      5. You want to add a new value 'archived' to an existing ENUM type status with values ('new', 'in_progress', 'done'). Which statement correctly adds 'archived' after 'done'?
      hard
      A. ALTER TYPE status ADD VALUE 'archived' BEFORE 'in_progress';
      B. ALTER TYPE status ADD VALUE 'archived' AFTER 'done';
      C. ALTER TYPE status ADD VALUE 'archived' BEFORE 'done';
      D. ALTER TYPE status MODIFY VALUE 'archived' AFTER 'done';

      Solution

      1. Step 1: Recall how to add ENUM values

        PostgreSQL uses ALTER TYPE ... ADD VALUE 'new_value' [BEFORE|AFTER existing_value] syntax.
      2. Step 2: Identify correct position

        To add 'archived' after 'done', use AFTER 'done'.
      3. Step 3: Check options

        ALTER TYPE status ADD VALUE 'archived' AFTER 'done'; matches correct syntax and position. Others use BEFORE (wrong position) or invalid keywords.
      4. Final Answer:

        ALTER TYPE status ADD VALUE 'archived' AFTER 'done'; -> Option B
      5. Quick Check:

        ALTER TYPE ADD VALUE ... AFTER ... [OK]
      Hint: Use ALTER TYPE ADD VALUE 'val' AFTER 'existing' to position [OK]
      Common Mistakes:
      • Using MODIFY instead of ADD VALUE
      • Placing new value BEFORE wrong existing value
      • Using wrong position like BEFORE 'done'