Es kann keine Verbindung zur psql-Datenbank hergestellt werden

王林
Freigeben: 2024-02-09 18:00:10
nach vorne
1221 Leute haben es durchsucht

无法连接到 psql 数据库

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.

Frageninhalt

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>.
Nach dem Login kopieren

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?)
Nach dem Login kopieren

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
    }

}
Nach dem Login kopieren

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.

Problemumgehung

Sie haben die Paketebenenvariable db nicht richtig initialisiert.

Der

:=-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 Bettenfd11e6f5

Oder 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"
}
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!