由于权限问题,无法连接到数据库(SQLSTATE 42501)
这个docker容器有我的postgres镜像,运行得很好,我已经能够查看数据库,我有问题连接我的代码到数据库的权利没有。每当我运行的代码,它给出了错误
$ go run .
2023/05/23 10:01:02 failed to connect to `host=localhost user=postgres database=blogs`: server error (FATAL: could not open file "global/pg_filenode.map": Permission denied (SQLSTATE 42501))
exit status 1
我的db.go
package main
import (
"database/sql"
"log"
_ "github.com/jackc/pgconn"
_ "github.com/jackc/pgx/v4"
_ "github.com/jackc/pgx/v4/stdlib"
)
func OpenDB(dsn string) (*sql.DB, error){
db, err := sql.Open("pgx", dsn)
if err != nil{
return nil, err
}
err = db.Ping()
if err != nil{
return nil, err
}
return db, err
}
func (app *application) ConnectToDB() (*sql.DB, error){
connection, err := OpenDB(app.DSN)
if err != nil{
return nil, err
}
log.Println("Connected to Posty!:-")
return connection, nil
}
我的主,去吧
package main
import (
"database/sql"
"flag"
"fmt"
"log"
"net/http"
)
const port = 8080
type application struct{
Domain string
DSN string
DB *sql.DB
}
func main(){
// set app config
var app application
// read from command line
flag.StringVar(&app.DSN, "dsn", "host=localhost port=5432 user=postgres password=postgres dbname=blogs sslmode=disable timezone=UTC connect_timeout=15", "Postgres Connection String")
flag.Parse()
//connect to the database
conn, err := app.ConnectToDB()
if err != nil{
log.Fatal(err)
}
app.DB = conn
app.Domain = "example.com"
log.Println("Starting application on port", port)
//start a web server
err = http.ListenAndServe(fmt.Sprintf(":%d", port), app.routes())
if err != nil{
log.Fatal(err)
}
}
1条答案
按热度按时间bd1hkmkf1#
global/pg_filenode.map是文件系统中的一个文件,数据库进程所有者需要访问该文件才能使数据库工作。如果它没有访问此文件的权限,则您的数据库已损坏。我不知道这是怎么发生的,大概是数据库之外的东西把它不应该做的事情搞砸了。解决这个问题可能很容易,只需将此文件的所有者/priv更改回它应该是什么,或者这可能是一些更深层次问题的症状。
我认为这是一个错误,这个错误被报告为42501。该代码应用于当数据库未能通过其内部权限系统时发生的错误,而这不是。这种情况应报告为以58或XX开头的错误。