“在数据库中未找到名为 'json' 的 PostgreSQL 类型” - Npgsql & cochroach db

问题描述 投票:0回答:1

使用此代码,在数据库中找不到名为“json”的 PostgreSQL 类型
连接字符串

var connString = "Host=REMOVE;Port=26257;Username=daniel;Password=REMOVED;Database=REMOVED";
var dataSourceBuilder = new NpgsqlDataSourceBuilder(connString);
var dataSource = dataSourceBuilder.Build();
var conn = dataSource.OpenConnection();
await using (var cmd = new NpgsqlCommand("SELECT * FROM table_name", conn))
await using (var reader = await cmd.ExecuteReaderAsync())
{
    while (await reader.ReadAsync())
        Console.WriteLine(reader.GetString(0));
}

这会导致控制台输出

A PostgreSQL type with the name 'json' was not found in the database
   at Npgsql.Internal.NpgsqlDatabaseInfo.GetPostgresTypeByName(String pgName)
   at Npgsql.TypeMapping.SystemTextJsonTypeHandlerResolver.PgType(String pgTypeName)
   at Npgsql.TypeMapping.SystemTextJsonTypeHandlerResolver..ctor(NpgsqlConnector connector, Dictionary`2 userClrTypes, JsonSerializerOptions serializerOptions)
   at Npgsql.TypeMapping.SystemTextJsonTypeHandlerResolverFactory.Create(TypeMapper typeMapper, NpgsqlConnector connector)
   at Npgsql.Internal.TypeMapping.TypeMapper.Initialize(NpgsqlDatabaseInfo databaseInfo, List`1 resolverFactories, Dictionary`2 userTypeMappings)
   at Npgsql.NpgsqlDataSource.Bootstrap(NpgsqlConnector connector, NpgsqlTimeout timeout, Boolean forceReload, Boolean async, CancellationToken cancellationToken)
   at Npgsql.Internal.NpgsqlConnector.Open(NpgsqlTimeout timeout, Boolean async, CancellationToken cancellationToken)
   at Npgsql.PoolingDataSource.OpenNewConnector(NpgsqlConnection conn, NpgsqlTimeout timeout, Boolean async, CancellationToken cancellationToken)
   at Npgsql.PoolingDataSource.<Get>g__RentAsync|28_0(NpgsqlConnection conn, NpgsqlTimeout timeout, Boolean async, CancellationToken cancellationToken)
   at Npgsql.NpgsqlConnection.<Open>g__OpenAsync|42_0(Boolean async, CancellationToken cancellationToken)
   at Npgsql.NpgsqlConnection.Open()
   at Npgsql.NpgsqlDataSource.OpenConnection()
   at Program.<Main>$(String[] args) in C:\Users\danie\RiderProjects\ConsoleApp1\ConsoleApp1\Program.cs:line 7
   at Program.<Main>(String[] args)

我正在使用 Jetbrains Rider for c#,它可以在数据库工具中很好地获取数据库。我也可以使用控制台插入和选择,并使用在 Linode 实例上运行的 next.js 代码读取它

c# database npgsql cockroachdb
1个回答
0
投票

我修复了它...这似乎是 npgsql 版本 8.0.0-preview.4 的问题

切换到版本 7.x 将删除此错误消息。

© www.soinside.com 2019 - 2024. All rights reserved.