Сохранение словаря (Of String, Int16()) в ячейку PostgreSQL

У меня есть Dictionary(of String, INT16()). Этот словарь представляет аналоговые значения из измерения. Я хочу сохранить этот словарь в одной ячейке базы данных PostgreSQL. Я использую Npgsql.

Я долго искал, но понятия не имею, как это сделать.

Я думал о том, чтобы сериализовать словарь и сохранить его в виде массива, но я не уверен, что это правильный путь.

Есть ли кто-нибудь, кто может мне помочь в этом вопросе?

Спасибо за ваши ответы

3 ответа

Решение

Посмотрите на CREATE TYPE

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

ОБНОВЛЕНИЕ: Вот полный пример того, как сделать это из pg sql

Определить тип элемента словаря

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

Создать образец таблицы. обратите внимание, что столбец коллекции помечен '[]' в конце

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'
        );

Обратите внимание, что это обычная таблица, как и любая другая таблица

SELECT * FROM CollectionsTables

Вот более продвинутый выбор.

SELECT Collection[1].k,Description FROM CollectionsTables

Первый столбец: ключ первого значения словаря
Второй столбец: столбец описания

Вы можете использовать тип данных JSON и даже применять к нему функции.
Это может или не может быть хорошим подходом, это зависит от того, что вам нужно делать с данными и как ваша система построена.

Хотя тип данных JSON (или JSONB) должен быть предпочтительным ответом, как упомянуто выше, у вас также есть возможность использовать hstore. Недостатком является то, что в hstore хранятся только строки, поэтому ваши значения не будут напечатаны.

Другие вопросы по тегам