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

.NET C#用Npgsql向PostgreSQL hstore插入数据报错求助

正确处理Npgsql插入PostgreSQL hstore类型的方法

基础配置:先搞定hstore扩展与类型映射

hstore是PostgreSQL的扩展类型,Npgsql原生支持和Dictionary<string, string>的直接映射,但必须先完成两项配置:

  • 启用数据库hstore扩展
    先在PostgreSQL中执行SQL确保扩展存在:

    CREATE EXTENSION IF NOT EXISTS hstore;
    
  • 注册Npgsql的hstore类型映射
    在应用启动阶段(比如Program.cs初始化逻辑里)添加类型映射代码:

    NpgsqlConnection.GlobalTypeMapper.MapHstore();
    

    如果用EF Core,就在DbContext的OnConfiguring方法里配置:

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseNpgsql("你的数据库连接字符串", opt => opt.UseHstore());
    }
    

正确插入数据的代码示例

配置完成后,直接传入Dictionary<string, string>即可,不需要手动转换格式:

var hstoreData = new Dictionary<string, string>
{
    {"username", "john_doe"},
    {"email", "john@example.com"}
};

using var connection = new NpgsqlConnection("连接字符串");
connection.Open();

using var command = new NpgsqlCommand(
    "INSERT INTO your_table (hstore_column) VALUES (@data)", 
    connection
);
command.Parameters.AddWithValue("@data", hstoreData);
command.ExecuteNonQuery();

解决你遇到的两个问题

  1. 字节不匹配错误
    这个问题大多是Npgsql版本与PostgreSQL版本不兼容,或者没正确注册hstore类型映射导致的。建议升级Npgsql到最新稳定版,同时确认数据库的hstore扩展已经启用。

  2. 类型不匹配错误
    手动转成key=>value格式的字符串会被识别为text类型,PostgreSQL不会自动隐式转换为hstore。必须依赖Npgsql的类型映射来处理,不要自己手动拼接字符串格式。

内容的提问来源于stack exchange,提问作者Akshay Mali

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 08:29:52