Tidak dapat menyambung ke pangkalan data psql

王林
Lepaskan: 2024-02-09 18:00:10
ke hadapan
1221 orang telah melayarinya

无法连接到 psql 数据库

Editor PHP Apple kadangkala menghadapi masalah "tidak dapat menyambung ke pangkalan data psql" semasa menjalankan operasi pangkalan data. Mesej ralat ini biasanya muncul apabila menggunakan pangkalan data PostgreSQL dan mungkin disebabkan oleh kegagalan sambungan disebabkan beberapa sebab biasa. Terdapat banyak cara untuk menyelesaikan masalah ini, termasuk menyemak parameter sambungan pangkalan data, mengesahkan sama ada pangkalan data sedang berjalan, menyemak sambungan rangkaian, dsb. Dalam artikel ini, kami akan memperkenalkan beberapa penyelesaian biasa untuk membantu pembaca menyelesaikan masalah ini dengan cepat dan melaksanakan operasi pangkalan data dengan lancar.

Kandungan soalan

Saya cuba menyambung ke pangkalan data tetapi saya mendapat ralat apabila saya membuat permintaan curl ke titik akhir menggunakan kaedah get. Saya menyemak semula kelayakan pengguna dan memberikan hak pengguna penuh dan super. Berikut ialah ralat yang saya dapat semasa melencongkan titik akhir:

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>.
Salin selepas log masuk

Sambungan diwujudkan dengan pangkalan data, dan apabila permintaan dibuat kepada pangkalan data, ralat ini dicetuskan:

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?)
Salin selepas log masuk

Program utama:

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
    }

}
Salin selepas log masuk

Saya cuba menyemak semula kebenaran pengguna dan format pangkalan data serta pesanan. Semuanya mengikut kod. Sambungan diwujudkan tetapi gagal dengan panik apabila menanyakan pangkalan data.

Penyelesaian

Anda tidak memulakan tahap pakej db pembolehubah dengan betul.

Pengendali

:=, dipanggil "pembolehubah pendek pengisytiharan", mengisytiharkan dan memulakan pembolehubah baharu dalam skop bloknya. Mana-mana pembolehubah dengan nama yang sama dalam skop luar akan "tersembunyi".

Untuk memulakan pembolehubah peringkat pakej dengan betul, anda boleh menggunakan tugasan mudah:

65 bedfd11e6f5

Atau anda boleh menggunakan := tetapi kemudian gunakan nama pembolehubah yang berbeza dan pastikan anda menggunakannya untuk tugasan:

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"
}
Salin selepas log masuk

Atas ialah kandungan terperinci Tidak dapat menyambung ke pangkalan data psql. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!