使用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
相关产品推荐
相关产品推荐

