Postgres错误在数据库上运行查询:无法检测默认用户名

时间:2016-06-10 16:27:09

标签: postgresql go docker docker-compose

您好我正在尝试使用Prometheus监控postgres SQL。为此,我使用此导出程序https://github.com/wrouesnel/postgres_exporter

我正在docker-compose.yml中启动导出器,如下所示:

  exporter-postgres:
    image: wrouesnel/postgres_exporter
    ports:
      - 9113:9113
    environment:
      - DATA_SOURCE_NAME="postgresql://user:pass@localhost:5432/?sslmode=disable" 

当导出器尝试访问数据库时,会抛出这样的错误:

Error running query on database: pg_stat_database pg: Could not detect default username. Please provide one explicitly. file="postgres-exporter.go" line=490

Error scanning runtime variable: pg_stat_database pg: Could not detect default username. Please provide one explicitly. file="postgres-exporter.go" line=464

我不确定这条消息的意思。此外,我不确定问题是否源自我的docker-compose文件或导出器。

postgres-exporter.go中抛出错误的行是:

// Use SHOW to get the value
row := db.QueryRow(fmt.Sprintf("SHOW %s;", columnName))

var val interface{}
err := row.Scan(&val)
if err != nil {
    log.Errorln("Error scanning runtime variable:", columnName, err)
    continue
}

query, er := queryOverrides[namespace]
if er == false {
    query = fmt.Sprintf("SELECT * FROM %s;", namespace)
}

// Don't fail on a bad scrape of one metric
rows, err := db.Query(query)
if err != nil {
    log.Println("Error running query on database: ", namespace, err)
    e.error.Set(1)
    return
}

https://github.com/wrouesnel/postgres_exporter/blob/master/postgres_exporter.go

我感谢任何帮助!

编辑:

以下是与数据库的连接:

db, err := sql.Open("postgres", e.dsn)

e.dsn生成如下:

dsn := os.Getenv("DATA_SOURCE_NAME")

连接不会抛出任何错误

1 个答案:

答案 0 :(得分:7)

嘿,对于将来有类似问题的人来说:

问题在于docker-compose.yml

中的这一行
 - DATA_SOURCE_NAME="postgresql://user:pass@localhost:5432/?sslmode=disable" 

将其更改为

 - DATA_SOURCE_NAME=postgresql://user:pass@localhost:5432/?sslmode=disable

(没有引号)使一切正常:)