Exception handling

You can catch and handle an exception in the PostgreSQL back-end just like any other exception. The back-end ErrorData structure is exposed as a property in a ServerException class derived from java.sql.SQLException, and the Java try/catch mechanism is synchronized with the back-end mechanism.

Note: for several reasons (see [[Thoughts on logging]] for background), referring to ServerException and ErrorData from your code is not currently recommended, and in the future may become impossible. An improved mechanism is expected in a future release. Until then, using only the standard Java API of java.sql.SQLException and its standard attributes (such as SQLState) is recommended wherever possible.

PL/Java will always catch exceptions that you don’t. They will cause a PostgreSQL error and the message is logged using the PostgreSQL logging utilities. The stack trace of the exception will also be printed if the PostgreSQL configuration parameter log_min_messages is set to DEBUG1 or lower.

Important Note:

You will not be able to continue executing back-end functions until your function has returned and the error has been propagated when the back-end has generated an exception unless you have used a save-point. When a save-point is rolled back, the exceptional condition is reset and execution can continue.