Le module plpy fournit aussi les fonctions plpy.debug(msg), plpy.log(msg), plpy.info(msg), plpy.notice(msg), plpy.warning(msg), plpy.error(msg) et plpy.fatal(msg). plpy.error et plpy.fatal("msg") 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 et plpy.fatal. 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 18, Configuration du serveur pour plus d'informations.
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 39.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)))