Bird
Raised Fist0
PostgreSQLquery~5 mins

Exception handling (BEGIN-EXCEPTION-END) 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 the purpose of the BEGIN-EXCEPTION-END block in PostgreSQL?
It is used to handle errors gracefully by running code that might fail inside BEGIN, catching errors in EXCEPTION, and then continuing or cleaning up in END.
Click to reveal answer
intermediate
How do you catch a specific error in a PostgreSQL exception block?
Use WHEN followed by the error name or SQLSTATE code inside the EXCEPTION block to catch specific errors.
Click to reveal answer
beginner
What happens if an error occurs inside a BEGIN block but there is no EXCEPTION block?
The error will stop the transaction and the error will be returned to the caller without any special handling.
Click to reveal answer
intermediate
Write a simple example of a BEGIN-EXCEPTION-END block that catches division by zero error.
BEGIN PERFORM 1 / 0; EXCEPTION WHEN division_by_zero THEN RAISE NOTICE 'Cannot divide by zero'; END;
Click to reveal answer
intermediate
Can you re-raise an error inside the EXCEPTION block in PostgreSQL?
Yes, you can use RAISE to re-throw the error after handling or logging it.
Click to reveal answer
What keyword starts the block where you handle exceptions in PostgreSQL?
ABEGIN
BEXCEPTION
CTRY
DCATCH
Which keyword is used to catch errors in PostgreSQL exception handling?
ACATCH
BEXCEPTION
CHANDLE
DWHEN
What happens if an error is not caught inside a BEGIN-EXCEPTION-END block?
AThe transaction continues normally
BThe error is propagated and stops the transaction
CThe error is ignored
DThe error is automatically fixed
How do you handle a division by zero error in PostgreSQL exception block?
AWHEN div_zero THEN
BWHEN zero_division THEN
CWHEN division_by_zero THEN
DWHEN divide_by_zero THEN
Can you re-raise an error inside the EXCEPTION block?
AYes, using RAISE
BYes, using THROW
CNo, errors cannot be re-raised
DOnly in PL/pgSQL functions
Explain how the BEGIN-EXCEPTION-END block works in PostgreSQL for error handling.
Think about how you try something, catch problems, and then finish.
You got /5 concepts.
    Describe how to catch and handle a specific error like division by zero in PostgreSQL.
    Focus on the keywords and error name.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main purpose of using a BEGIN-EXCEPTION-END block in PostgreSQL?
      easy
      A. To catch and handle errors during code execution
      B. To speed up query execution
      C. To create new tables automatically
      D. To backup the database

      Solution

      1. Step 1: Understand the role of BEGIN-EXCEPTION-END

        This block is designed to catch errors that happen during the execution of SQL or PL/pgSQL code.
      2. Step 2: Identify the purpose of error handling

        It allows the code to handle errors gracefully without stopping the entire process.
      3. Final Answer:

        To catch and handle errors during code execution -> Option A
      4. Quick Check:

        Error handling = A [OK]
      Hint: Remember: BEGIN-EXCEPTION-END is for error catching [OK]
      Common Mistakes:
      • Thinking it speeds up queries
      • Confusing it with table creation
      • Assuming it backs up data
      2. Which of the following is the correct syntax to start an exception block in PostgreSQL?
      easy
      A. BEGIN TRY ... EXCEPTION ... END
      B. START ... EXCEPTION ... FINISH
      C. BEGIN ... EXCEPTION ... END
      D. TRY ... CATCH ... END

      Solution

      1. Step 1: Recall PostgreSQL exception block syntax

        PostgreSQL uses BEGIN ... EXCEPTION ... END to define a block with error handling.
      2. Step 2: Compare options with correct syntax

        Only BEGIN ... EXCEPTION ... END matches the exact syntax used in PostgreSQL.
      3. Final Answer:

        BEGIN ... EXCEPTION ... END -> Option C
      4. Quick Check:

        PostgreSQL uses BEGIN-EXCEPTION-END syntax [OK]
      Hint: Look for BEGIN and EXCEPTION keywords together [OK]
      Common Mistakes:
      • Using TRY-CATCH like other languages
      • Adding extra keywords like START or FINISH
      • Mixing syntax from other SQL dialects
      3. What will be the output of the following PostgreSQL block?
      DO $$
      BEGIN
        RAISE EXCEPTION 'Error happened';
      EXCEPTION
        WHEN OTHERS THEN
          RAISE NOTICE 'Caught an error';
      END $$;
      medium
      A. The block raises an error and stops execution
      B. It prints 'Caught an error' as a notice and continues
      C. It prints 'Error happened' as a notice
      D. Syntax error due to missing semicolon

      Solution

      1. Step 1: Analyze the RAISE EXCEPTION statement

        The block raises an exception with message 'Error happened'.
      2. Step 2: Check the EXCEPTION block handling

        The exception handler catches all errors (WHEN OTHERS) and raises a NOTICE with 'Caught an error'.
      3. Final Answer:

        It prints 'Caught an error' as a notice and continues -> Option B
      4. Quick Check:

        Exception caught triggers NOTICE message [OK]
      Hint: WHEN OTHERS catches all errors and can raise NOTICE [OK]
      Common Mistakes:
      • Assuming the error stops execution
      • Confusing EXCEPTION message with NOTICE
      • Thinking syntax error occurs
      4. Identify the error in this PostgreSQL exception block:
      BEGIN
        PERFORM 1/0;
      EXCEPTION
        WHEN division_by_zero THEN
          RAISE NOTICE 'Division by zero caught';
      END;
      medium
      A. Missing DO $$ ... $$ wrapper for anonymous block
      B. Incorrect exception name; should be zero_division_error
      C. RAISE NOTICE cannot be used inside EXCEPTION
      D. No error; block is correct

      Solution

      1. Step 1: Check block context

        In PostgreSQL, standalone BEGIN-EXCEPTION-END blocks must be inside a DO block or function.
      2. Step 2: Verify exception name and usage

        Exception name 'division_by_zero' is valid, and RAISE NOTICE is allowed inside EXCEPTION.
      3. Step 3: Identify missing DO wrapper

        The code lacks DO $$ ... $$ to run as an anonymous block.
      4. Final Answer:

        Missing DO $$ ... $$ wrapper for anonymous block -> Option A
      5. Quick Check:

        Anonymous blocks need DO wrapper [OK]
      Hint: Use DO $$ ... $$ for anonymous BEGIN blocks [OK]
      Common Mistakes:
      • Thinking exception name is wrong
      • Believing RAISE NOTICE is invalid here
      • Ignoring the need for DO wrapper
      5. You want to write a PostgreSQL block that tries to insert a row into a table but if a unique constraint violation occurs, it should print 'Duplicate found' and continue without error. Which code snippet correctly implements this?
      hard
      A. BEGIN INSERT INTO users(id) VALUES(1); EXCEPTION WHEN duplicate_key THEN RAISE NOTICE 'Duplicate found'; END;
      B. BEGIN INSERT INTO users(id) VALUES(1); EXCEPTION WHEN unique_error THEN RAISE NOTICE 'Duplicate found'; END;
      C. BEGIN INSERT INTO users(id) VALUES(1); EXCEPTION WHEN unique_constraint THEN RAISE NOTICE 'Duplicate found'; END;
      D. BEGIN INSERT INTO users(id) VALUES(1); EXCEPTION WHEN unique_violation THEN RAISE NOTICE 'Duplicate found'; END;

      Solution

      1. Step 1: Identify correct exception name for unique constraint

        PostgreSQL uses unique_violation to catch unique constraint errors.
      2. Step 2: Check the exception block syntax

        The block catches unique_violation and raises a notice 'Duplicate found' correctly.
      3. Step 3: Verify other options

        Other options use incorrect exception names that do not exist in PostgreSQL.
      4. Final Answer:

        BEGIN INSERT INTO users(id) VALUES(1); EXCEPTION WHEN unique_violation THEN RAISE NOTICE 'Duplicate found'; END; -> Option D
      5. Quick Check:

        Use unique_violation for unique constraint errors [OK]
      Hint: Use unique_violation to catch duplicate key errors [OK]
      Common Mistakes:
      • Using wrong exception names
      • Forgetting to handle unique_violation
      • Not raising a notice or message