PostgreSQLLa base de données la plus sophistiquée au monde.
Documentation PostgreSQL 16.4 » Programmation serveur » PL/Python -- Langage de procédures Python » Fonctions outils

46.9. Fonctions outils #

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 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(string) et plpy.quote_ident(string). 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 :

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