Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql pq:剩余的连接插槽保留给非复制超级用户和rds_超级用户连接_Postgresql_Go - Fatal编程技术网

Postgresql pq:剩余的连接插槽保留给非复制超级用户和rds_超级用户连接

Postgresql pq:剩余的连接插槽保留给非复制超级用户和rds_超级用户连接,postgresql,go,Postgresql,Go,我不断地发现这个错误: pq:剩余的连接插槽保留给非复制超级用户和rds_超级用户连接 我读过很多文章,但这些都只是从数据库方面给出解决方案,而不是golang方面。我无法更改数据库配置,max_连接已在3500中 这个过程是: 我从调用API获取数据,然后直接将响应数据存储到某人的数据库中,而不是通过API 我尝试过添加time.sleep,重用http,共享http,设置传输,但这个问题似乎与连接无关 *我已经检查过了,我关闭了回复 获取: 职位: 我原以为它可以处理15000个数据,但这个

我不断地发现这个错误:

pq:剩余的连接插槽保留给非复制超级用户和rds_超级用户连接

我读过很多文章,但这些都只是从数据库方面给出解决方案,而不是golang方面。我无法更改数据库配置,max_连接已在3500中

这个过程是: 我从调用API获取数据,然后直接将响应数据存储到某人的数据库中,而不是通过API

我尝试过添加time.sleep,重用http,共享http,设置传输,但这个问题似乎与连接无关

*我已经检查过了,我关闭了回复

获取: 职位:
我原以为它可以处理15000个数据,但这个错误总是出现在3000个数据中

显示的代码没有连接到postgres,因此它与postgres连接的错误无关。很可能你在处理完连接/结果后并没有关闭它们。@Adrian halo先生,谢谢您的回复。我忘了显示后期处理。在这里我已经更新了。。与postgres的联系。谢天谢地,这看起来像是一个缺少大量上下文的混合代码。你能给我一个电话吗?@Adrian好的,先生。这就足够了吗?我认为复制粘贴有一些问题,因为发布的代码在语法上是无效的,不完整的,也没有格式化。
client := &http.Client{
    Transport: &http.Transport{
        MaxIdleConns: 100,
        MaxIdleConnsPerHost: 100,
    },
    Timeout: time.Duration(30) * time.Second,
}

req, err := http.NewRequest("GET", magento_url, nil)
response, err := client.Do(req)

if err != nil {
    fmt.Printf("The HTTP request failed with error %s\n", err)
} 

defer response.Body.Close()

body, err := ioutil.ReadAll(response.Body)
if err != nil {
   log.Fatalf("Couldn't parse response body. %+v", err)
}
fmt.Println("Response Body:", string(body)) 

countriesMap := make(map[string]interface{})

err = json.Unmarshal([]byte(body), &countriesMap)
if err != nil {
    panic(err.Error())
}   

for  key,val := range countriesMap {
     if(key=="items"){
        switch concreteVal := val.(type) {
           case []interface{}:
               fmt.Println(key)
               parseArray(val.([]interface{}))

            default:
                fmt.Println(key, ":", concreteVal)

            }
        }
     }
func parseArray(anArray []interface{}) {
   arrayData := make(map[string]interface{})
   for i, val := range anArray {
       switch concreteVal := val.(type) {
       case map[string]interface{}:
           fmt.Println("Index::", i)

           for key, valLast := range val.(map[string]interface{}) {
               switch concreteValLast := valLast.(type) {

               default:
                   if key=="coupon_code"{
                       arrayData["coupon_code"]=concreteValLast
                   }else if key=="coupon_description"{
                       arrayData["coupon_description"]=concreteValLast
                   }
               }
           }
       default:
           fmt.Println("Index", i, ":", concreteVal)

       }
       dm_connection := []string{"user=",dm_username," password=",dm_password," dbname=",dm_database," port=",dm_port," host=",dm_host};
       db, err := sql.Open("postgres", strings.Join(dm_connection,""))
       if err != nil {
         panic(message)
       }
      defer db.Close()

      var dataField ApiData

      checkingData := `SELECT coupon_code FROM discount WHERE coupon_code = $1`
      err = db.QueryRow(checkingData, arrayData["coupon_code"]).Scan(&dataField.Coupon_code)

            if err != nil {
                if err == sql.ErrNoRows {
                    //INSERT DM
                    InsertDM(db, arrayData)

                }else{
                    fmt.Println(message)
                }
            }
     func InsertDM(db *sql.DB, arrayData map[string]interface{}){

       insertStatement:=`INSERT INTO discount (coupon_code,coupon_description,created_at) VALUES ($1,$2,$3)`
       _,errInsertDM := db.Exec(insertStatement,arrayData["coupon_code"],arrayData["coupon_description"],arrayData["timestamp"])

   // if there is an error inserting, handle it
       if errInsertDM != nil {
           message:=errInsertDM.Error()
          panic(message)
       }

       insertedData++

    }
}