## 35.9. Errors and Messages

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

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

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 Section 16.4, “Run-time Configuration” for more information.

Inside the format string, `%` is replaced by the next optional argument's string representation. Write `%%` to emit a literal `%`. Note that the optional arguments must presently be simple variables, not 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.