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

使用Npgsql连接CockroachDB时提示json类型未找到问题求助

解决Npgsql连接CockroachDB时"json类型未找到"的异常

问题原因

CockroachDB仅兼容PostgreSQL的jsonb类型,原生不支持PostgreSQL的json类型。而Npgsql默认会尝试初始化针对json类型的System.Text.Json解析器,连接时会去数据库中查找json类型,从而抛出该异常。

解决方案

方案1:禁用默认JSON解析器,仅注册jsonb支持

修改数据源构建代码,移除默认的System.Text.Json解析器工厂,只注册jsonb类型的处理逻辑:

var connString = "Host=REMOVE;Port=26257;Username=daniel;Password=REMOVED;Database=REMOVED";
var dataSourceBuilder = new NpgsqlDataSourceBuilder(connString);

// 移除默认解析器工厂,避免查找json类型
dataSourceBuilder.RemoveTypeResolverFactory<SystemTextJsonTypeHandlerResolverFactory>();
// 手动注册jsonb类型处理
dataSourceBuilder.MapJsonb();

var dataSource = dataSourceBuilder.Build();
var conn = dataSource.OpenConnection();

方案2:通过连接字符串强制仅处理jsonb

在连接字符串中添加JsonbOnly=true参数,让Npgsql只针对jsonb类型初始化解析器:

var connString = "Host=REMOVE;Port=26257;Username=daniel;Password=REMOVED;Database=REMOVED;JsonbOnly=true";
var dataSourceBuilder = new NpgsqlDataSourceBuilder(connString);
var dataSource = dataSourceBuilder.Build();
var conn = dataSource.OpenConnection();

方案3:升级Npgsql到最新稳定版

确保使用的Npgsql版本为最新稳定版(如8.x及以上),新版本对CockroachDB的兼容性优化更好,可能已默认处理该类型差异。

验证

修改代码后重新执行查询,即可正常读取数据,不会再抛出类型未找到的异常。

内容的提问来源于stack exchange,提问作者Daniel Dorman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 11:40:13