如何将go-admin连接到PostgreSQL数据库?解决goadmin_session不存在报错
问题描述
我按照go-admin官方文档配置了后台管理面板与PostgreSQL数据库,因使用Docker容器,将数据库主机设为"db"。但访问首页端点时出现报错,文档中未找到关于"goadmin_session"的相关说明,不知如何解决。
配置代码
cfg := config.Config{ Databases: config.DatabaseList{ "default": { Host: "db", Port: "5432", User: "gorm", Pwd: "gorm", Name: "gorm_db", MaxIdleConns: 50, MaxOpenConns: 150, Driver: "postgresql", }, }, UrlPrefix: "admin", // The url prefix of the website. // Store must be set and guaranteed to have write access, otherwise new administrator users cannot be added. Store: config.Store{ Path: "./uploads", Prefix: "uploads", }, Language: language.EN, }
报错栈信息
engine/engine.go:402 =====> Initialize database connections 2023-03-30T09:49:43.715842137Z 检查 pg 配置 host=db port=5432 user=gorm password=gorm dbname=gorm_db sslmode=disable 2023-03-30T09:49:43.736955435Z Database connection closed 2023-03-30T09:49:43.739423928Z panic: pq: relation "goadmin_session" does not exist 2023-03-30T09:49:43.739453429Z 2023-03-30T09:49:43.739462206Z goroutine 1 [running]: 2023-03-30T09:49:43.739469476Z github.com/GoAdminGroup/go-admin/modules/db.CommonQuery(0x14d2600?, {0xc00045b840?, 0x1630314?}, {0xc000277220?, 0x0?, 0x0?}) 2023-03-30T09:49:43.739641400Z /go/pkg/mod/github.com/!go!admin!group/go-admin@v1.2.24/modules/db/performer.go:20 +0x676 2023-03-30T09:49:43.739652103Z github.com/GoAdminGroup/go-admin/modules/db.(*Postgresql).QueryWithConnection(0xc0002b61e0, {0x1630314, 0x7}, {0xc00045b800?, 0x8a29a8?}, {0xc000277220, 0x1, 0x1}) 2023-03-30T09:49:43.739659429Z /go/pkg/mod/github.com/!go!admin!group/go-admin@v1.2.24/modules/db/postgresql.go:52 +0x9e 2023-03-30T09:49:43.739665812Z github.com/GoAdminGroup/go-admin/modules/db.(*Postgresql).QueryWith(0x7fedcc37b768?, 0x7fedf3f0f5b8?, {0x1630314?, 0xc000080400?}, {0xc00045b800?, 0x0?}, {0xc000277220?, 0x8e4916?, 0x10?}) 2023-03-30T09:49:43.739672840Z /go/pkg/mod/github.com/!go!admin!group/go-admin@v1.2.24/modules/db/postgresql.go:74 +0x65 2023-03-30T09:49:43.739678702Z github.com/GoAdminGroup/go-admin/modules/db.(*SQL).All(0xc000442b40) 2023-03-30T09:49:43.739699812Z /go/pkg/mod/github.com/!go!admin!group/go-admin@v1.2.24/modules/db/statement.go:442 +0x102 2023-03-30T09:49:43.740099312Z github.com/GoAdminGroup/go-admin/modules/auth.InitCSRFTokenSrv({0x1b87c70?, 0xc0002b61e0}) 2023-03-30T09:49:43.740116344Z /go/pkg/mod/github.com/!go!admin!group/go-admin@v1.2.24/modules/auth/auth.go:94 +0x235 2023-03-30T09:49:43.740123217Z github.com/GoAdminGroup/go-admin/engine.(*Engine).Use(0xc00010b360, {0x160c380, 0xc0004b4820}) 2023-03-30T09:49:43.740134285Z /go/pkg/mod/github.com/!go!admin!group/go-admin@v1.2.24/engine/engine.go:72 +0xf3 2023-03-30T09:49:43.740140103Z main.main() 2023-03-30T09:49:43.740145212Z /app/app/main/main.go:57 +0x37d
解决方案
这个错误是因为go-admin依赖的核心系统表(包括goadmin_session)未在PostgreSQL数据库中创建,按以下步骤修复:
- 确认数据库基础状态:先确保
gorm_db数据库已创建,用户gorm拥有该数据库的建表、读写权限,避免因权限不足导致表无法生成。 - 开启自动建表逻辑:在初始化go-admin engine时,添加
Migrate()调用触发自动建表,修改初始化代码如下:
engine := engine.Default() // 添加数据库配置后执行Migrate if err := engine.AddDatabase(cfg).Migrate(); err != nil { log.Fatal(err) } // 后续执行Use、Run等操作
- 手动建表(自动建表失败时):如果自动建表未生效,可手动执行SQL创建
goadmin_session表(结构根据go-admin版本调整,以下为参考):
CREATE TABLE goadmin_session ( id varchar(64) NOT NULL PRIMARY KEY, content text, created_at timestamp with time zone, updated_at timestamp with time zone );
同时需确保go-admin所需的其他系统表(如goadmin_user、goadmin_menu等)也已创建,可从go-admin源码中提取对应SQL执行。
内容的提问来源于stack exchange,提问作者kjtn99
相关产品推荐
相关产品推荐

