Go应用用pgx驱动配合goose迁移报错‘unknown driver "pgx"’的原因
解决Goose搭配pgx驱动时出现"sql: unknown driver 'pgx'"的问题
问题场景
基于PostgreSQL的Go Web应用,使用pgx作为数据库驱动,集成goose执行启动时自动迁移,运行时出现以下错误:
Opening DB 2023/08/09 09:39:28 sql: unknown driver "pgx" (forgotten import?)
问题原因
你导入的_ "github.com/jackc/pgx/v5"并不会向Go标准库的database/sql注册驱动。pgx的标准库适配驱动在github.com/jackc/pgx/v5/stdlib包中,只有导入这个包,才会注册名为"pgx"的sql驱动,而goose的OpenDBWithDriver依赖标准库的database/sql来建立连接。
如果你的openDbConnectionPool函数使用的是pgx自己的连接池(如pgxpool),原来的pgx/v5相关导入可以保留,但必须额外导入stdlib包。
解决方案
修改代码中的导入部分,替换或补充导入pgx/v5/stdlib:
修改后的import示例
import ( "context" "flag" "fmt" "log" "os" "github.com/jackc/pgx/v5/pgxpool" // 若用到pgx原生连接池,保留此导入 _ "github.com/jackc/pgx/v5/stdlib" // 必须导入此包以注册pgx的sql驱动 "github.com/pressly/goose/v3" )
额外说明
- 导入时使用空白标识符
_是因为我们只需要执行该包的init函数来注册驱动,不需要直接使用包内的其他内容。 - 确保
goose.OpenDBWithDriver的第一个参数仍然是"pgx",这个驱动名称是由stdlib包注册的,与参数匹配即可。
内容的提问来源于stack exchange,提问作者ajfriesen
相关产品推荐
相关产品推荐

