将字典(Of String,Int16())保存到 PostgreSQL 单元格中

Saving a Dictionary(Of String, Int16()) into a PostgreSQL cell

我有一个 Dictionary(of String, INT16()). 这本字典表示来自测量的模拟值。我想将这本字典存储到 PostgreSQL 数据库的一个单元格中。我正在使用 Npgsql。

我搜索了很长时间,但我不知道该怎么做。

我的想法是将字典序列化并保存为数组,但我不确定这是不是正确的方法。

有没有人可以帮我解决这个问题?

感谢您的回答

看看CREATE TYPE

CREATE TYPE StringIntPairType AS (k string,v int);

更新: 这是如何从 pg sql

完成此操作的完整示例

定义字典的元素类型

CREATE TYPE StringIntPairType AS (k text,v int);

创建样本table。请注意,集合列在末尾标记为“[]”

CREATE TABLE CollectionsTables
(
  Id SERIAL UNIQUE,
  Collection  StringIntPairType[],
  Description TEXT,
  TS TIMESTAMP NOT NULL DEFAULT now()
)

插入一条包含两个字典元素的记录

INSERT INTO CollectionsTables(Collection,Description) VALUES
(
    array
    [
       ('Test1',1)::StringIntPairType,
       ('Test2',2)::StringIntPairType
    ],
    'Description1'
);

插入另一个包含两个字典元素的单条记录

INSERT INTO CollectionsTables(Collection,Description) VALUES
        (
            array
            [
               ('TestA',30)::StringIntPairType,
               ('TestB',40)::StringIntPairType
            ],
            'Description2'
        );

请注意,这是常规 table 就像任何其他 table

SELECT * FROM CollectionsTables

这里有一些更高级的select。

SELECT Collection[1].k,Description FROM CollectionsTables

第一列:第一个字典值的键
第二栏:描述栏

你可以在上面使用JSON datatype, and even apply functions
这可能是也可能不是一个好方法,这取决于您需要对数据做什么以及您的系统是如何构建的。

虽然如上所述 JSON(或 JSONB)数据类型应该是首选答案,但您也可以选择使用 hstore。缺点是 hstore 只存储字符串,所以你的整数不会被键入。