Documentation PostgreSQL 15.15 » Programmation serveur » PL/Python -- Langage de procédures Python » Fonctions outils

Précédent | Niveau supérieur | Suivant
46.8. Gestion des transactions | Sommaire | 46.10. Python 2 versus Python 3

## 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)))