
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 变量。
智睿报修管理系统定位行政企业,单位,机关加快网络无纸办公化,网络信息报修管理系统,系统支持城市区域模块管理,会员信息模块,报修种类,维修工人信息显示,达到快速准确到位,支持在线打印,数据导出,汇总数据,报修次数统计。本系统为免费版本,不收取任何费用,可直接使用。 功能模块: 权限设置 - 可设多个管理员,自由分配选项管理权限 数据备份 - 支持在线数据库备份及还原数据库 类别管理 - 支持
161
:= 运算符称为“短变量声明”,在其块作用域中声明并初始化一个新变量。外部作用域中任何具有相同名称的变量都将被“隐藏”。
要正确初始化包级变量,您可以使用简单的赋值:
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中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号