Database Golang postgres错误常量?

Database Golang postgres错误常量?,database,postgresql,go,Database,Postgresql,Go,我正在尝试使用postgres驱动程序(lib/pq)删除数据库,方法是: db.Exec(“DROP DATABASE dbName;”) 但是我想根据收到的错误是奇怪的还是“数据库不存在”的错误来做一个不同的条件 我的问题是,是否有一个常量变量或其他东西可以用来检查返回的错误是否是“database not Existence”错误消息,或者我是否需要自己手动解析错误字符串 我试图查看文档,但找不到“数据库不存在”的任何内容。然而,我确实发现了以下列表: 也许它适用于其他错误代码?另外,我不

我正在尝试使用postgres驱动程序(lib/pq)删除数据库,方法是:

db.Exec(“DROP DATABASE dbName;”)

但是我想根据收到的错误是奇怪的还是“数据库不存在”的错误来做一个不同的条件

我的问题是,是否有一个常量变量或其他东西可以用来检查返回的错误是否是“database not Existence”错误消息,或者我是否需要自己手动解析错误字符串

我试图查看文档,但找不到“数据库不存在”的任何内容。然而,我确实发现了以下列表:

也许它适用于其他错误代码?另外,我不太确定通过Postgres驱动程序获取和比较错误代码的语义正确方法。我想我应该这样做

如果err.ErrorCode!=“xxx”

谢谢。

程序包可能返回类型错误,这是一个结构。如果是,您可以使用它的所有字段来检查错误的详细信息

这是如何做到的:

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
包含以下字段:

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
}
这些字段的含义和可能值是特定于Postres的,完整列表可在此处找到:

您可以使用以下内容:

它有许多针对各种postgres错误的映射

使用该软件包,您可以执行以下操作(摘自自述文件):

//示例使用:
_,err=stmt.Exec(SomeInsertStateMent,params…)
如果出错!=零{
如果e:=pgerror.UniqueViolation(err);e!=nil{
//您可以在此处使用e来检查字段等
返回一些已经存在的东西
}
返回err//其他情况。
}

在尝试删除数据库之前,您不想检查数据库是否存在的任何原因?这也是一个可接受的解决方案,我不知道我可以这样做:-)是否有查询?当然可以。检查pg_数据库对象<代码>从pg_数据库中选择TRUE,其中datname='abc'另外,如果您想避免整个问题,只需:
删除数据库(如果存在dbName)哦,太棒了,谢谢,太完美了。谢谢,这很有帮助,不过我只想使用上面提到的Nicarus(如果存在数据库dbName;,请删除数据库)。如果有人想知道返回的错误消息是什么,那么应该是这样的:pq.error{Severity:“error”,Code:“3D000”,message:“database\“dbname\”不存在”,Detail:,Hint:,Position:,InternalPosition:,InternalQuery:,Where:,Schema:,Table:,Column:,DataTypeName:,Constraint:,File:“dbcommands.c”,行:“799”,例程:“dropdb”}无法执行安装程序:pq:数据库“dbname”不存在这是所有错误代码/名称的列表