2017-09-12 39 views
1

我有一個Dictionary(of String, INT16()).此字典表示來自測量的模擬值。我想將這個字典存儲到PostgreSQL數據庫的一個單元格中。我正在使用Npgsql。將字典(字符串,Int16())保存到PostgreSQL單元中

我在尋找一段很長的時間,但我不知道該怎麼做。

我的想法是序列化字典並將其保存爲數組,但我不確定這是否是正確的方法。

有沒有人可以幫我解決這個問題?

謝謝您的回答

+1

不是一個好主意,有這樣的數據庫模式,需要將列表存儲在一個字段。所以在這種情況下,序列化解決方案聽起來不錯 – Reniuz

+0

什麼是常見的方式?使用序列化數據保存文件,還是將序列化數據保存爲字節流?最後我認爲它是一樣的。我在這個問題上是個小白菜。 –

+0

當然是字節數組。爲什麼你甚至需要一個文件。 – Reniuz

回答

-1

看一看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 

第一欄:第一字典值
第二列的關鍵:說明列

+0

這隻允許存儲一個字符串/ int *對*,而不是像上面所提到的字典(或對的集合)。 –

+0

@ShayRojansky我可以清楚地理解,建議的類型代表集合中的單個元素。幸運的是,pg支持數組... –

+0

@ShayRojansky爲了您的方便我添加了一個完整的示例代碼,包括數組的用法 –

1

您可以使用JSON datatype,甚至在其應用functions
這可能也可能不是一個好方法,它取決於您需要如何處理數據以及如何構建您的系統。

+0

我有一個datagridview。它的每一行代表一次測量運行。我也有一個chartview。如果我對特定的行進行雙擊,chartview將顯示所選運行的特定模擬值。如字典中所提及的值應保存在相應數據庫行的一個單元格內。 –

0

雖然JSON(或JSONB)數據類型應該是上述的首選答案,但您也可以選擇使用hstore。缺點是hstore只存儲字符串,所以你的整數不會輸入。