Le module plpy fournit aussi les fonctions
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 et plpy.fatal lèvent une exception Python qui, si non attrapée, se propage à la requête appelante causant l'annulation de la transaction ou sous-transaction en cours. raise plpy.Error(msg) et raise plpy.Fatal(msg) sont équivalent à appeler, respectivement, plpy.error(msg) et plpy.fatal(msg), mais la forme raise n'autorise pas de passer des arguments par mot clé. Les autres fonctions génèrent uniquement des messages de niveaux de priorité différents. Que les messages d'une priorité particulière soient reportés au client, écrit dans les journaux du serveur ou les deux, cette configuration est contrôlée par les variables log_min_messages et client_min_messages. Voir le Chapitre 19, Configuration du serveur pour plus d'informations.
L'argument msg est donné en tant qu'argument de position. Pour des raisons de compatibilité descendante, plus d'un argument de position doit être donné. Dans ce cas, la représentation en chaîne de caractères de la ligne des arguments de position devient le message rapporté au client.
Les arguments suivant par mot clé seulement sont acceptés :
detail |
hint |
sqlstate |
schema_name |
table_name |
column_name |
datatype_name |
constraint_name |
La représentation en chaine des objets passés en argument par mot clé seulement est utilisé pour enrichir les messages rapportés au client. Par exemple :
CREATE FUNCTION raise_custom_exception() RETURNS void AS $$ plpy.error("custom exception message", detail="some info about exception", hint="hint for users") $$ LANGUAGE plpythonu; =# 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"
Voici un autre ensemble de fonctions outils : plpy.quote_literal(string), plpy.quote_nullable(string) et plpy.quote_ident(string). Elles sont équivalentes aux fonctions internes de mise entre guillemets décrites dans Section 9.4, « Fonctions et opérateurs de chaînes ». Elles sont utiles lors de la construction de requêtes. Un équivalent PL/Python d'une requête SQL dynamique pour Exemple 42.1, « Mettre entre guillemets des valeurs dans des requêtes dynamiques » serait :
plpy.execute("UPDATE tbl SET %s = %s WHERE key = %s" % ( plpy.quote_ident(colname), plpy.quote_nullable(newvalue), plpy.quote_literal(keyvalue)))