2016-11-11 45 views
1

我有一個數據表。我將它導出爲JSON。它看起來像這樣:Postgresql - JSON

{"@timestamp":"2015-05-18T08:57:48.646Z","ip":"0.0.0.0","extension":"php","response":"404","geo":{"coordinates":{"lat":33.48288111,"lon":-90.98561389},"src":"MD","dest":"ID","srcdest":"MD:ID"},"@tags":["success","info"]} 

有成千上萬這些線。不過,我想在JSON的每一行之前插入一個如下所示的增量ID:{「index」:{「_ id」:「1」}}。輸出應該是這個樣子:

{"index":{"_id":"1"}} 
{"@timestamp":"2015-05-18T08:57:48.646Z","ip":"0.0.0.0","extension":"php","response":"404","geo":{"coordinates":{"lat":33.48288111,"lon":-90.98561389},"src":"MD","dest":"ID","srcdest":"MD:ID"},"@tags":["success","info"]} 
{"index":{"_id":"2"}} 
{"@timestamp":"2015-05-18T08:57:48.646Z","ip":"0.0.0.0","extension":"php","response":"404","geo":{"coordinates":{"lat":33.48288111,"lon":-90.98561389},"src":"MD","dest":"ID","srcdest":"MD:ID"},"@tags":["success","info"]} 

任何想法我怎麼能做到這一點的JSON或如果我能在Postgres的那種方式出口嗎?

+0

是否要更改導出(文本)文件,或者是否要更改用於導出的SQL語句中的數據? –

+0

以任何方式。我只需要一個帶有所述格式的json輸出。基本上,我有它在postgresql和導出到JSON。這就是我得到的。我只需要在我的原始帖子中看到的每個訂單項都添加索引。任何想法將不勝感激。 @a_horse_with_no_name –

+0

你目前如何將數據導出到JSON?如果你想得到正確的答案,你應該添加表格定義和你當前的查詢。 – Patrick

回答

0

我不能真正給你一個更好的答案,沒有任何額外的信息,據我所知,你有這個數據在一個表中歸一化,所以不JSONJSON|JSONB列。

如果是這樣的話,你顯然知道如何把它弄出來。你的問題似乎歸結爲添加一列到一個表,在你的情況下命名爲index(雖然我會建議使用另一個名字,因爲index是一個保留字),也許idx會工作。

無論如何不知道更多(例如記錄數量或其他約束條件,您必須使用),我會建議創建一個帶有序列列的新表並重新插入值,從而產生所需的結果並解決這個問題在可預見的未來,是這樣的:

CREATE TABLE new_table AS SELECT * FROM old_table WITH NO DATA; 
ALTER TABLE new_table ADD COLUMN idx SERIAL; 
INSERT INTO new_table SELECT * FROM old_table; 

這將產生一個表new_table使用下表old_table和包含您所追求的ID的新列idx的所有值(或者看起來好像你是後: ))。

最後落old_table

DROP TABLE old_table; 

和更新依賴於舊錶的任何腳本。

希望這可以讓你在正確的軌道上......

+0

不幸的是,這只是添加一個新的ID序列表,導出到JSON將只導出爲另一列。目前,訪問日誌中大約有1M條目。我將其導入到postgresql中,並將其放入表中。我也出口到JSON,這是我在上面的描述。但是,我需要爲每個條目/行添加index&_id。我在這裏真的是新手,如果我缺乏某些信息,我很抱歉。:)自學和這個地方一直很棒! –

+0

它確實只是在每行之前添加索引&_id。我試圖讓這個輸入變得有彈性,這就是我所要做的。我做了JSON導入示例,它的工作是彈性的。如果你確實知道更簡單的方法,請告訴我。再次感謝! :) –

0

你沒告訴我們你的源的樣子,以及如何將數據導出,但如果你導出一個SQL查詢的結果,你可以簡單地將row_number()添加到結果中:

select row_to_json(t) 
from (
    select row_number() over() as id, 
     * -- all the other columns 
    from the_table 
) t 

這將爲ID分配順序不特定。如果您需要,可在窗口功能中添加一個order by,例如row_number() over (order by "timestamp")

+0

這有點接近我所需要的。結果是:{「id」:1,「@ timestamp」:「2015-05-18T08:57:48.646Z」,「ip」:「0.0.0.0」,「extension」:「php」,「response」 : 「404」, 「地理位置」:{ 「座標」:{ 「LAT」:33.48288111, 「LON」: - 90.98561389}, 「SRC」: 「MD」, 「DEST」: 「ID」, 「srcdest」:」 MD:ID「},」@ tags「:[」success「,」info「]} 但是,我需要使用上述格式導出它。我正在努力玩弄它。非常感謝您的回覆。 –

+0

對於一個解決方案絕對使用上述... –