php小編蘋果進行資料庫操作時,有時會遇到"無法連接到 psql 資料庫"的問題。這個錯誤訊息通常出現在使用PostgreSQL資料庫時,可能是因為一些常見的原因導致的連線失敗。解決這個問題的方法有很多,包括檢查資料庫連線參數、確認資料庫是否正在運作、檢查網路連線等。在本文中,我們將介紹一些常見的解決方法,幫助讀者快速解決這個問題,並順利進行資料庫操作。
我正在嘗試連接到資料庫,但當我使用 get
方法向端點發出curl 請求時出現錯誤。我仔細檢查了使用者憑證,並授予了完全權限和超級使用者權限。
以下是捲曲端點時出現的錯誤:
santosh@pkg*$:curl -i localhost:8080/books/show http/1.1 303 see other content-type: text/html; charset=utf-8 location: /books date: sat, 19 nov 2022 12:09:52 gmt content-length: 33 <a href="/books">see other</a>.
與資料庫建立連接,當向資料庫發出請求時,會觸發這些錯誤:
santosh@pkg*$:go run main.go database connection successful. 2022/11/19 17:39:47 http: panic serving 127.0.0.1:44324: runtime error: invalid memory address or nil pointer dereference goroutine 35 [running]: net/http.(*conn).serve.func1() /usr/local/go/src/net/http/server.go:1850 +0xbf panic({0x6960e0, 0x8e5630}) /usr/local/go/src/runtime/panic.go:890 +0x262 database/sql.(*db).conn(0x0, {0x7593d0, 0xc00011a000}, 0x1) /usr/local/go/src/database/sql/sql.go:1288 +0x53 database/sql.(*db).query(0x6?, {0x7593d0, 0xc00011a000}, {0x6da967, 0x13}, {0x0, 0x0, 0x0}, 0x68?)
主程式:
var db *sql.DB type Books struct { Isbn string Title string Author string Price float32 } func init() { var err error args := fmt.Sprintf("host=%s port=%d dbname=%s user='%s' password=%s sslmode=%s", "localhost", 5432, "bookstore", "santosh", "dts123", "disable") db, err := sql.Open("postgres", args) if err != nil { fmt.Printf("Creating Database %s", err) } if err = db.Ping(); err != nil { panic(err) } fmt.Println("Database connection succussful.") } func main() { http.HandleFunc("/", index) http.HandleFunc("/books", booksIndex) http.ListenAndServe(":8080", nil) } func index(w http.ResponseWriter, r *http.Request) { http.Redirect(w, r, "/books", http.StatusSeeOther) } func booksIndex(w http.ResponseWriter, r *http.Request) { if r.Method != "GET" { http.Error(w, http.StatusText(405), http.StatusMethodNotAllowed) return } rows, err := db.Query("SELECT * FROM books") if err != nil { http.Error(w, http.StatusText(500), 500) return } defer rows.Close() bks := make([]Books, 0) for rows.Next() { bk := Books{} err := rows.Scan(&bk.Isbn, &bk.Title, &bk.Author, &bk.Price) if err != nil { http.Error(w, http.StatusText(500), 500) return } bks = append(bks, bk) } if err = rows.Err(); err != nil { http.Error(w, http.StatusText(500), 500) return } }
我嘗試仔細檢查使用者權限和資料庫格式以及順序。一切都符合代碼。連線已建立,但在查詢資料庫時因恐慌而失敗。
您沒有正確初始化套件級 db
變數。
:=
運算子稱為“短變數宣告”,在其區塊作用域中宣告並初始化一個新變數。外部作用域中任何具有相同名稱的變數都會被「隱藏」。
要正確初始化包級變量,您可以使用簡單的賦值:
65床fd11e6f5或您可以使用 :=
但隨後使用不同的變數名稱並確保將其用於指派:
var db *sql.DB func init() { args := fmt.Sprintf("host=%s port=%d dbname=%s user='%s' password=%s sslmode=%s", "localhost", 5432, "bookstore", "santosh", "dts123", "disable") _db, err := sql.Open("postgres", args) if err != nil { fmt.Printf("Creating Database %s", err) } // ... db = _db // set "global" }
以上是無法連線到 psql 資料庫的詳細內容。更多資訊請關注PHP中文網其他相關文章!