2016-06-01 5 views
2

은 내가 수행하여 포스트 그레스 드라이버 (LIB/PQ)를 사용하여 데이터베이스를 삭제하기 위해 노력하고있어 :Golang postgres 오류 상수?

db.Exec("DROP DATABASE dbName;")

을하지만받은 오류 뭔가인지 나는에 따라 다른 조건을 싶습니다 이상한, 또는 "데이터베이스 존재하지 않습니다"오류입니다.

내 질문에, 거기에 상수 변수 또는 "데이터베이스 존재하지 않는"오류 메시지가 반환되는 경우 또는 오류 문자열을 수동으로 구문 분석 할 수 있는지 확인하는 데 사용할 수 있습니까?

설명서를 살펴 보았지만 "데이터베이스가 존재하지 않습니다"라는 메시지를 찾을 수 없습니다. 그러나이 목록을 찾았습니다 : https://www.postgresql.org/docs/9.3/static/errcodes-appendix.html

아마도 다른 오류 코드에 맞습니까? 또한 Postgres 드라이버를 통해 오류 코드를 가져 와서 비교하는 의미 상으로 정확한 방법은 확실하지 않습니다. 나는이

if err.ErrorCode != "xxx"

감사합니다? :처럼 내가 뭔가를해야 가정.

+0

데이터베이스를 삭제하기 전에 데이터베이스가 있는지 확인하고 싶지 않은 이유가 있습니까? – Nicarus

+0

그것도 수용할만한 해결책이 될 것입니다, 나는 그것을 할 수 있다는 것을 몰랐습니다 :-) 그것에 대한 질문이 있습니까? 확실히 – b0xxed1n

+0

. pg_database 객체를 확인하십시오. 'pg_database FROM pg_database where datname = 'abc'; ' – Nicarus

답변

4

lib/pq 패키지는 구조체 인 *pq.Error 유형의 오류를 반환 할 수 있습니다. 오류가있는 경우 모든 필드를 사용하여 오류의 세부 사항을 검사 할 수 있습니다.

는 할 수있는 방법입니다 Postres 특정하고 전체 목록을 찾을 수 이러한 필드의

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 
} 

의미와 가능한 값 :

if err, ok := err.(*pq.Error); ok { 
    // Here err is of type *pq.Error, you may inspect all its fields, e.g.: 
    fmt.Println("pq error:", err.Code.Name()) 
} 

pq.Error는 다음과 같은 필드가 있습니다 여기 : Error and Notice Message Fields

+0

고마워요, 이것은 도움이되었지만, 위에서 언급 한 Nicarus를 사용하려고합니다. (DROP DATABASE IF EXISTS dbName;) 오류 메시지가 반환 된 내용이 궁금하신 분은 pq.Error {심각도 : "ERROR", 코드 : "3D000", 메시지 : "데이터베이스 \"dbname \ "가 존재하지 않습니다." ":", 스키마 : "", 테이블 : "", 열 : "", 데이터 유형 이름 : "", 내부 쿼리 : "", 위치 : "", InternalPosition : 제약 조건 : "", 파일 : "dbcommands.c", 줄 : "799", 루틴 : "dropdb"} 설치 프로그램을 실행할 수 없습니다 : pq : database "dbname" – b0xxed1n