Skip to content
Advertisement

Way to suppress PostgreSQL-Error with custom error

For the last hours I got stuck on the problem, that I want a custom error (“Wrong airline_id. Please check your input again”) over the normal error code (insert or update on table “flightplan” violates foreign key constraint “fk_flightplan_airline”).

But no matter what I try, I always get the standard error. Please Help.

CREATE OR REPLACE FUNCTION add_flight(
  PLAN_ID INT,
  AIRLINE_ID INT,
  STATUS_ID INT)
  RETURNS void AS $BODY$
  BEGIN
  INSERT INTO flight.flightgplan VALUES(
    PLAN_ID,
    AIRLINE_ID,
    STATUS_ID);
  IF airline_id > 8 THEN RAISE EXCEPTION USING errcode = 99881;
  ELSE IF status_id > 10 THEN RAISE EXCEPTION USING errcode = 99882;
  END IF;
 EXCEPTION
  WHEN SQLSTATE '99881' THEN raise EXCEPTION 'Wrong airline_id. Please check your input again';
  WHEN SQLSTATE '99882' THEN raise EXCEPTION 'Wrong status_id. Please check your input again';
  END;
$BODY$ LANGUAGE plpgsql;

Advertisement

Answer

The custom exceptions should be thrown before performing the insert so that the insert will not be executed:

IF airline_id > 8 THEN RAISE EXCEPTION USING errcode = 99881;
ELSE IF status_id > 10 THEN RAISE EXCEPTION USING errcode = 99882;
END IF;
INSERT INTO flight.flightgplan VALUES(
    PLAN_ID,
    AIRLINE_ID,
    STATUS_ID);
User contributions licensed under: CC BY-SA
6 People found this is helpful
Advertisement