44.9. Funciones de utilidad #

El módulo plpy también proporciona las funciones

plpy.debug(msg, **kwargs)
plpy.log(msg, **kwargs)
plpy.info(msg, **kwargs)
plpy.notice(msg, **kwargs)
plpy.warning(msg, **kwargs)
plpy.error(msg, **kwargs)
plpy.fatal(msg, **kwargs)

plpy.error y plpy.fatal en realidad lanzan una excepción de Python que, si no se captura, se propaga a la consulta que llama, lo que hace que la transacción o subtransacción actual se aborte. raise plpy.Error(msg) y raise plpy.Fatal(msg) son equivalentes a llamar a plpy.error(msg) y plpy.fatal(msg), respectivamente, pero la forma raise no permite pasar argumentos de palabras clave (keyword arguments). Las otras funciones solo generan mensajes de diferentes niveles de prioridad. Si los mensajes de una prioridad particular se reportan al cliente, se escriben en el registro del servidor, o ambos, está controlado por las variables de configuración log_min_messages y client_min_messages. Consulta Chapter 19 para obtener más información.

El argumento msg se proporciona como un argumento posicional. Para mantener la compatibilidad con versiones anteriores, se puede proporcionar más de un argumento posicional. En ese caso, la representación en cadena de la tupla de argumentos posicionales se convierte en el mensaje reportado al cliente.

Se aceptan los siguientes argumentos que solo admiten palabras clave (keyword-only):

detail
hint
sqlstate
schema_name
table_name
column_name
datatype_name
constraint_name

La representación en cadena de los objetos pasados como argumentos de solo palabras clave se utiliza para enriquecer los mensajes reportados al cliente. Por ejemplo:

CREATE FUNCTION raise_custom_exception() RETURNS void AS $$
plpy.error("custom exception message",
           detail="some info about exception",
           hint="hint for users")
$$ LANGUAGE plpython3u;

=# SELECT raise_custom_exception();
ERROR:  plpy.Error: custom exception message
DETAIL:  some info about exception
HINT:  hint for users
CONTEXT:  Traceback (most recent call last):
  PL/Python function "raise_custom_exception", line 4, in <module>
    hint="hint for users")
PL/Python function "raise_custom_exception"

Otro conjunto de funciones de utilidad son plpy.quote_literal(string), plpy.quote_nullable(string), y plpy.quote_ident(string). Son equivalentes a las funciones de entrecomillado incorporadas descritas en el Section 9.4. Son útiles al construir consultas ad-hoc. Un equivalente en PL/Python de SQL dinámico de Example 41.1 sería:

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