我有一個Dictionary(of String, INT16()).
此字典表示來自測量的模擬值。我想將這個字典存儲到PostgreSQL數據庫的一個單元格中。我正在使用Npgsql。將字典(字符串,Int16())保存到PostgreSQL單元中
我在尋找一段很長的時間,但我不知道該怎麼做。
我的想法是序列化字典並將其保存爲數組,但我不確定這是否是正確的方法。
有沒有人可以幫我解決這個問題?
謝謝您的回答
我有一個Dictionary(of String, INT16()).
此字典表示來自測量的模擬值。我想將這個字典存儲到PostgreSQL數據庫的一個單元格中。我正在使用Npgsql。將字典(字符串,Int16())保存到PostgreSQL單元中
我在尋找一段很長的時間,但我不知道該怎麼做。
我的想法是序列化字典並將其保存爲數組,但我不確定這是否是正確的方法。
有沒有人可以幫我解決這個問題?
謝謝您的回答
看一看CREATE TYPE
CREATE TYPE StringIntPairType AS (k string,v int);
UPDATE: 下面是如何從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
第一欄:第一字典值
第二列的關鍵:說明列
這隻允許存儲一個字符串/ int *對*,而不是像上面所提到的字典(或對的集合)。 –
@ShayRojansky我可以清楚地理解,建議的類型代表集合中的單個元素。幸運的是,pg支持數組... –
@ShayRojansky爲了您的方便我添加了一個完整的示例代碼,包括數組的用法 –
您可以使用JSON datatype,甚至在其應用functions。
這可能也可能不是一個好方法,它取決於您需要如何處理數據以及如何構建您的系統。
我有一個datagridview。它的每一行代表一次測量運行。我也有一個chartview。如果我對特定的行進行雙擊,chartview將顯示所選運行的特定模擬值。如字典中所提及的值應保存在相應數據庫行的一個單元格內。 –
雖然JSON(或JSONB)數據類型應該是上述的首選答案,但您也可以選擇使用hstore。缺點是hstore只存儲字符串,所以你的整數不會輸入。
不是一個好主意,有這樣的數據庫模式,需要將列表存儲在一個字段。所以在這種情況下,序列化解決方案聽起來不錯 – Reniuz
什麼是常見的方式?使用序列化數據保存文件,還是將序列化數據保存爲字節流?最後我認爲它是一樣的。我在這個問題上是個小白菜。 –
當然是字節數組。爲什麼你甚至需要一個文件。 – Reniuz