

   Le module plpy fournit aussi les fonctions
   
| plpy.debug( | 
| plpy.log( | 
| plpy.info( | 
| plpy.notice( | 
| plpy.warning( | 
| plpy.error( | 
| plpy.fatal( | 
   
   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(
   et msg)raise plpy.Fatal( sont
   équivalent à appeler, respectivement,
   msg)plpy.error( et
   msg)plpy.fatal(, mais la forme
   msg)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 20 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 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"
   
   Voici un autre ensemble de fonctions outils :
   plpy.quote_literal(,
   string)plpy.quote_nullable( et
   string)plpy.quote_ident(.
   Elles sont équivalentes aux fonctions internes de mise entre
   guillemets décrites dans Section 9.4. Elles
   sont utiles lors de la construction de requêtes. Un équivalent
   PL/Python d'une requête SQL dynamique pour Exemple 43.1 serait :
   string)
plpy.execute("UPDATE tbl SET %s = %s WHERE key = %s" % (
    plpy.quote_ident(colname),
    plpy.quote_nullable(newvalue),
    plpy.quote_literal(keyvalue)))