You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 19:40:05