Maison  >  Article  >  développement back-end  >  Comment obtenir les détails de l'erreur de l'insertion SQL effectuée dans Go ?

Comment obtenir les détails de l'erreur de l'insertion SQL effectuée dans Go ?

WBOY
WBOYavant
2024-02-09 13:27:211188parcourir

如何获取在 Go 中完成的 SQL 插入的错误详细信息?

L'éditeur php Yuzai peut parfois rencontrer des erreurs lors de l'utilisation du langage Go pour l'insertion SQL. Dans ce cas, il est important de connaître les détails de l’erreur pour localiser et résoudre le problème. Heureusement, le langage Go offre un moyen simple d'obtenir les détails des erreurs d'insertion SQL. En utilisant la méthode Stmt.Exec dans le package base de données/sql, nous pouvons obtenir l'objet d'erreur lorsqu'une erreur se produit. Ensuite, nous pouvons utiliser la méthode Error de l’interface d’erreur pour obtenir les détails de l’erreur. Cette méthode peut renvoyer une chaîne contenant une description spécifique de l'erreur, nous permettant de mieux comprendre et résoudre le problème.

Contenu de la question

J'essaie d'insérer des données dans une base de données à l'aide de go. En raison de la nature des données (exportation importante depuis un autre outil), je me heurte parfois à certaines limitations du modèle.

Utilisez le code go suivant

_, err := db.exec(query, params...)
if err != nil {
    log.print(err)
}

Je viens d'obtenir un résultat comme celui-ci

2023/03/10 09:40:26 pq: insert or update on table "table" violates foreign key constraint "table_constraint"
exit status 1

Quand je fais la même insertion depuis pgadmin, j'obtiens la même erreur mais aussi des informations détaillées .

DETAIL:  Key (id)=(abc) is not present in table "table_2".

Existe-t-il un moyen d'obtenir ces informations détaillées ? J'ai vérifié la documentation mais je n'ai rien trouvé, mais peut-être existe-t-il un moyen ?

Solution de contournement

Habituellement, le pilote de base de données que vous utilisez aura un type d'erreur personnalisé. Vous pouvez modifier le champ err 值断言为此错误类型,然后根据驱动程序的实现,您应该能够收集有关该问题的更多详细信息。例如,当使用 github.com/lib/pq 时,可以断言 *pq.error 并阅读其 detail par :

_, err := db.Exec(query, params...)
if err != nil {
    if e, ok := err.(*pq.Error); ok {
        log.Print(e.Detail)
    }
}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer