如何在SQLC中将PostgreSQL布尔类型映射为null.Bool而非sql.NullBool
可行,按以下步骤调整配置即可
核心问题:配置的类型匹配或写法有误
你之前的尝试没生效,大概率是类型覆盖的配置写法不对,或者没匹配到PostgreSQL布尔类型的正确标识。PostgreSQL的布尔类型官方名称是boolean,sqlc对这个类型的覆盖需要精准配置。
正确的sqlc.yaml配置示例
在你的配置文件的gen.go.overrides节点下添加以下规则:
version: "2" sql: - schema: "your_schema.sql" queries: "your_queries.sql" engine: "postgresql" gen: go: package: "your_db_package" out: "./db" overrides: # 已有的text、timestamptz覆盖 - db_type: "text" go_type: import: "gopkg.in/guregu/null.v4" type: "String" - db_type: "timestamptz" go_type: import: "gopkg.in/guregu/null.v4" type: "Time" # 新增布尔类型的覆盖 - db_type: "boolean" go_type: import: "gopkg.in/guregu/null.v4" type: "Bool"
额外注意事项
- 确保SQL参数是可选的:如果你的
SetUserParams对应UPDATE语句,要保证active参数是可选逻辑(比如用COALESCE($1, active)),这样sqlc才会生成nullable类型,而非普通的bool。 - 检查拼写和导入路径:确认
gopkg.in/guregu/null.v4已经通过go get安装,配置里的import路径和type名称(Bool首字母大写)不能写错。 - 重新生成代码:修改配置后,执行
sqlc generate重新生成结构体,此时SetUserParams里的Active字段就会变成null.Bool。
内容的提问来源于stack exchange,提问作者Goodies
相关产品推荐
相关产品推荐

