2016-11-03 3 views
0

こんにちは私はGOでdatabase/sqlパッケージを使用していますが、このエラーを処理したいのですが、 これを実行する最善の方法は何ですか?このエラーの名前は「テーブル上で更新または削除する」tablenameは「外部キー制約に違反しますか?

rows, err := transaction.Stmt(MypreparedStmt).Exec(id) 
if err!=nil{ 
    // here I want to check if the error is something with the foreign key so I want something like 
    //if err==something{ 
      //do something 
    //} 
} 
+1

log.Println(err)を実行してその内容を見ると、エラーの表示方法をカスタマイズすることもできます - https://blog.golang.org/error-handling-and-go –

+3

[ Golang postgresエラー定数?](http://stackoverflow.com/questions/37560534/golang-postgres-error-constants) – icza

+0

私はメッセージをチェックしませんが、エラー_code_です。 –

答えて

1

良い質問:なぜ、すべての外部キー関連のエラーを持っているなど何かをするという共通の「フレーズを」見つけることができません!これはgithub.com/lib/pq.Errorですが、エラーサイトでfmt.Printf("%T\n", err)を貼り付けて確認できます。この仮定を外すと、check the properties of this type

type Error struct { 
    Severity   string 
    Code    ErrorCode 
    Message   string 
    Detail   string 
    Hint    string 
    Position   string 
    InternalPosition string 
    InternalQuery string 
    Where   string 
    Schema   string 
    Table   string 
    Column   string 
    DataTypeName  string 
    Constraint  string 
    File    string 
    Line    string 
    Routine   string 
} 

クール!我々はErrorCodeのメンバーを持っているようです。 Postgres's error code list23503 | foreign_key_violationを確認できます。一緒にこのすべてを置く、それはあなたがこれを行うことができようになっています

const foreignKeyViolationErrorCode = ErrorCode("23503") 
if err != nil { 
    if pgErr, isPGErr := err.(pq.Error); isPGErr { 
     if pgErr.ErrorCode != foreignKeyViolationErrorCode { 
      // handle foreign_key_violation errors here 
     } 
    } 
    // handle non-foreign_key_violation errors 
} 

注:あなたが扱うようにしようとしている1以外にも、「外部キー違反」の題目の下に他のエラー条件があるかもしれません。興味のある特定のエラーケースを絞り込むために、pq.Error構造体の他のフィールドを調べることを検討してください。

1

たぶん私はあなたの質問を理解していないが、私は何を得るのは、単にエラーがあなたのテーブルの外部キー列とは何かを持っているかどうかをテストします。

import (
    //... 
    "string" 
) 

var foreignKeyError = "Here we have a substring that always appears in this type of errors" 

//... 
if err != nil { 

    if strings.Contains(err.Error(), foreignKeyError) { 
     specialFunctionThatHandlesThisTypeOfError(err) 
    } 

} 
+0

ありがとうございますが、私はこれ以外のものを見つけることを望んでいました – user6638204

関連する問題