## 36.9. Errors and Messages

Use the `RAISE` statement to report messages and raise errors.

    RAISE level 'format' [, expression [, ...]];

Possible levels are `DEBUG`, `LOG`, `INFO`, `NOTICE`, `WARNING`, and `EXCEPTION`. `EXCEPTION` raises an error (which normally aborts the current transaction); the other levels only generate messages of different priority levels. Whether messages of a particular priority are reported to the client, written to the server log, or both is controlled by the log_min_messages and client_min_messages configuration variables. See Chapter 17, Server Configuration for more information.

Inside the format string, `%` is replaced by the next optional argument's string representation. Write `%%` to emit a literal `%`. Arguments can be simple variables or expressions, and the format must be a simple string literal.

In this example, the value of `v_job_id` will replace the `%` in the string:

    RAISE NOTICE 'Calling cs_create_job(%)', v_job_id;

This example will abort the transaction with the given error message:

    RAISE EXCEPTION 'Nonexistent ID --> %', user_id;

`RAISE EXCEPTION` presently always generates the same SQLSTATE code, `P0001`, no matter what message it is invoked with. It is possible to trap this exception with `EXCEPTION ... WHEN RAISE_EXCEPTION THEN ...` but there is no way to tell one `RAISE` from another.