Heim >Backend-Entwicklung >Golang >Es kann keine Verbindung zur psql-Datenbank hergestellt werden
PHP-Editor Apple stößt beim Ausführen von Datenbankoperationen manchmal auf das Problem „Verbindung zur psql-Datenbank kann nicht hergestellt werden“. Diese Fehlermeldung erscheint normalerweise bei der Verwendung einer PostgreSQL-Datenbank und kann aus häufigen Gründen auf einen Verbindungsfehler zurückzuführen sein. Es gibt viele Möglichkeiten, dieses Problem zu lösen, einschließlich der Überprüfung der Datenbankverbindungsparameter, der Bestätigung, ob die Datenbank ausgeführt wird, der Überprüfung der Netzwerkverbindung usw. In diesem Artikel stellen wir einige gängige Lösungen vor, die den Lesern helfen sollen, dieses Problem schnell zu lösen und Datenbankvorgänge reibungslos durchzuführen.
Ich versuche, eine Verbindung zur Datenbank herzustellen, erhalte jedoch eine Fehlermeldung, wenn ich mit der Methode get
eine Curl-Anfrage an den Endpunkt stelle. Ich habe die Benutzeranmeldeinformationen noch einmal überprüft und Voll- und Superuser-Rechte gewährt.
Hier ist die Fehlermeldung, die ich beim Curling des Endpunkts erhalte:
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>.
Es wird eine Verbindung mit der Datenbank hergestellt und wenn eine Anfrage an die Datenbank gestellt wird, werden diese Fehler ausgelöst:
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?)
Hauptprogramm:
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 } }
Ich habe versucht, die Benutzerberechtigungen sowie das Datenbankformat und die Reihenfolge noch einmal zu überprüfen. Alles entspricht dem Code. Die Verbindung wird hergestellt, schlägt jedoch bei der Abfrage der Datenbank mit einer Panik fehl.
Sie haben die Paketebenenvariable db
nicht richtig initialisiert.
:=
-Operator, auch „kurze Variable deklaration“ genannt, deklariert und initialisiert eine neue Variable in ihrem Blockbereich. Jede Variable mit demselben Namen im äußeren Bereich wird „versteckt“.
Um Variablen auf Paketebene ordnungsgemäß zu initialisieren, können Sie eine einfache Zuweisung verwenden:
65 Bettenfd11e6f5Oder Sie können :=
verwenden, dann aber einen anderen Variablennamen verwenden und darauf achten, diesen für die Zuweisung zu verwenden:
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" }
Das obige ist der detaillierte Inhalt vonEs kann keine Verbindung zur psql-Datenbank hergestellt werden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!