मेरे पास एक वेब एप्लिकेशन है जो मैं शुरू कर रहा हूं। स्टार्टअप पर ठीक काम करता है लेकिन अगर मैं इसे छोड़ देता हूं (कहने के लिए, एक घंटा) और इसे किसी अन्य अनुरोध के साथ दबाएं तो क्वेरी लटकती है। मैंने प्रत्येक क्वेरी के बाद इसे बंद करने के बारे में सोचा और फिर एक नया कनेक्शन खोल दिया लेकिन दस्तावेज़ स्पष्ट रूप से कहते हैं, "डीबी को बंद करना दुर्लभ है, क्योंकि डीबी हैंडल लंबे समय तक रहने और कई गोरोटाइन के बीच साझा किया जाता है।" मैं क्या गलत कर रहा हूं?डेटाबेस का उपयोग नहीं किया जाता है अगर
package main
import (
"database/sql"
"log"
"net/http"
_ "github.com/lib/pq"
)
var Db *sql.DB
func main() {
var err error
Db, err = sql.Open("postgres", "user=me password=openupitsme host=my.host.not.yours dbname=mydb sslmode=require")
if err != nil {
log.Fatal("Cannot connect to db: ", err)
}
http.HandleFunc("/page", myHandler)
http.ListenAndServe(":8080", nil)
}
func myHandler(w http.ResponseWriter, r *http.Request) {
log.Println("Handling Request....", r)
query := `SELECT pk FROM mytable LIMIT 1`
rows, err := Db.Query(query)
if err != nil {
log.Println(err)
}
defer rows.Close()
for rows.Next() {
var pk int64
if err := rows.Scan(&pk); err != nil {
log.Println(err)
}
log.Println(pk)
}
log.Println("Request Served...")
}
संपादित करें # 1:
2015-07-08 18:10:01 EDT [7710-1] [email protected] LOG: could not receive data from client: Connection reset by peer
2015-07-08 18:20:01 EDT [7756-1] [email protected] LOG: could not receive data from client: Connection reset by peer
एक त्रुटि संदेश होना चाहिए। "क्वेरी लटकती है" पर्याप्त वर्णनात्मक नहीं है। – zerkms
डीबी एक ही मशीन पर ऐप के रूप में स्थित है, या यह अलग है? क्या फ़ायरवॉल/एनएटी शामिल है (जहां निष्क्रियता के कारण राज्य का समय समाप्त हो सकता है। जब ऐप लटकता है तो नेटस्टैट अभी भी कनेक्शन को सक्रिय के रूप में दिखाता है? – Doon
आप डीबी कहां चला रहे हैं? क्या यह उसकेोकू पर है? अगर उसका उपयोग नहीं किया जाता है तो हरोकू "सोता है" इसलिए अगली लाइव क्वेरी में समय लगेगा। साथ ही, कृपया ध्यान दें कि आपको प्रत्येक क्वेरी के लिए कनेक्शन खोलने और बंद करने की आवश्यकता नहीं है, लेकिन आपके पास अपने प्रोग्राम के अंत में एक करीबी बयान होना चाहिए। –