我该如何在Npgsql中使用hstore列类型?

3

我有一个具有以下模式的表:

CREATE TABLE account
(
  id serial primary key,
  login varchar(40) not null,
  password varchar(40) not null,
  data hstore
);

我想要使用一个带有参数的NpgsqlCommand对象从我的应用程序中检索和存储账户数据。我需要在NpgsqlParameter中使用哪种DbType? 枚举NpgsqlDbType没有hstore的值。我能否将DictionaryHashTable用作NpgsqlParameter对象的值?
当我使用JSON列时,我可以创建一个NpgsqlDbType.Text类型的参数,使用类似于JSON.Net的库将对象序列化为JSON字符串并发送类似于以下的SQL语句:
INSERT INTO account (login, password, data) VALUES (:login, :password, :data::json)

不幸的是,这不能用于 hstore 列。当我尝试这样做时,会出现语法错误:

INSERT INTO account (login, password, data) VALUES (:login, :password, :data::hstore)

我传递给数据参数的字符串如下:
'key1 => "value1", key2 => "value2"'
这个字符串包含键值对,使用箭头符号将键和值分隔开。在IT技术中,这种格式通常用于表示配置信息或参数选项。

2
你遇到了什么错误?虽然Npgsql中没有hstore本地数据类型,但如果您可以将hstore数据处理为字符串,则可以尝试使用DbType.Object和/或NpgsqlDbType.Text。此外,请启用Postgresql服务器日志,或打印NpgsqlException.ErrorSql属性,以便我们可以看到Npgsql发送给服务器的查询。希望这可以帮助到您。 - Francisco Junior
1个回答

2
感谢您,Francisco!我在日志中看到当单引号(')传递到PostgreSQL时,它们在字符串的开头和结尾处被转义了。如果我传递

key1 => "value1", key2 => "value2"

代替,我可以将数据插入到hstore列中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接