Le code Tcl contenu ou appelé à partir d'une fonction PL/Tcl peut lever
   une erreur, soit en exécutant des opérations invalides ou en générant
   une erreur en utilisant la commande Tcl error ou la
   commande PL/Tcl elog. Si une erreur n'est pas
   rattrapée mais est autorisée à être propagée en dehors du niveau racine de
   l'exécution de la fonction PL/Tcl, elle est rapportée comme une erreur SQL
   dans la requête appelant la fonction.
  
   Les erreurs SQL survenant dans les commandes PL/Tcl
   spi_exec, spi_prepare
   et spi_execp sont rapportées comme des erreurs Tcl,
   donc elles sont récupérables par la commande Tcl catch.
   (Chacune des ces commandes PL/Tcl exécutent leurs opérations SQL dans une
   sous transaction, qui est annulée en cas d'erreur, si bien que n'importe
   quelle opération partiellement terminée sera automatiquement nettoyée.)
   De la même façon, si une erreur se propage en dehors du niveau racine sans
   avoir été rattrapée, elle sera rapportée en erreur SQL.
  
   Tcl fournit une variable errorCode pouvant représenter
   des informations supplémentaires sur une erreur dans un format qui est
   simple à interpréter pour les programmes Tcl. Le contenu est dans le format
   liste Tcl, et le premier mot identifie le sous-système ou la bibliothèque
   rapportant l'erreur ; au-delà, le contenu est laissé au sous-système
   individuel ou à la bibliothèque. Pour les erreurs au niveau base rapportées
   par les commandes PL/Tcl commands, le premier mot est
   POSTGRES, le second est le numéro de version du serveur,
   et les mots supplémentaires sont les paires nom/valeur des champs fournissant
   des informations détaillées sur l'erreur.
   Les champs SQLSTATE, condition
   et message sont toujours fournies (les deux premiers
   représentent le code d'erreur et le nom de la condition comme indiqués dans
   Annexe A). Les champs potentiellement présents
   incluent
   detail, hint, context,
   schema, table, column,
   datatype, constraint,
   statement, cursor_position,
   filename, lineno et
   funcname.
  
   Une façon agréable de travailler avec l'information
   errorCode de PL/Tcl est de la charger dans un tableau
   pour que les noms du champ deviennent des indices du tableau. Un code
   relatif ressemblerait à ceci :
   
if {[catch { spi_exec $sql_command }]} {
    if {[lindex $::errorCode 0] == "POSTGRES"} {
        array set errorArray $::errorCode
        if {$errorArray(condition) == "undefined_table"} {
            # gestion de la table manquante
        } else {
            # gestion des autres types d'erreur SQL
        }
    }
}
   
   (Les symboles deux-points spécifient explicitement que
   errorCode est une variable globale.)