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