## 43.9. Utility Functions

The `plpy` module also provides the functions `plpy.debug(`msg`)`, `plpy.log(`msg`)`, `plpy.info(`msg`)`, `plpy.notice(`msg`)`, `plpy.warning(`msg`)`, `plpy.error(`msg`)`, and `plpy.fatal(`msg`)`. `plpy.error` and `plpy.fatal` actually raise a Python exception which, if uncaught, propagates out to the calling query, causing the current transaction or subtransaction to be aborted. `raise plpy.Error(`msg`)` and `raise plpy.Fatal(`msg`)` are equivalent to calling `plpy.error` and `plpy.fatal`, respectively. The other functions 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 18 for more information.

Another set of utility functions are `plpy.quote_literal(`string`)`, `plpy.quote_nullable(`string`)`, and `plpy.quote_ident(`string`)`. They are equivalent to the built-in quoting functions described in Section 9.4. They are useful when constructing ad-hoc queries. A PL/Python equivalent of dynamic SQL from Example 40.1 would be:

    plpy.execute("UPDATE tbl SET %s = %s WHERE key = %s" % (
        plpy.quote_ident(colname),
        plpy.quote_nullable(newvalue),
        plpy.quote_literal(keyvalue)))