Сохранение словаря (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 хранятся только строки, поэтому ваши значения не будут напечатаны.