我使用Postgres 10,有這樣的表
Table "musicbrainz.acoustid_meta"
Column | Type | Collation |Nullable | Default
-------------- ------------------- ----------- ---------- ---------
id | integer | | not null |
軌道 | character varying | | |
藝術家 | character varying | |
專輯 | character varying | | |
album_artist | character varying | | |
track_no | character varying | | |
disc_no | character varying | |
年 | character varying | | |
索引。
"acoustid_meta_index" btree (id)
而我以前的csv檔案是這樣的
id,track,artist,album,album_artist,track_no,disc_no,year
23033007,Satellite,Dave Matthews Band, Under the Table & 做夢,戴夫-馬修斯樂隊,3,N,1994。
我用
匯入的psql jthinksearch -c "copy musicbrainz.acoustid_meta from '/home/ubuntu/code/acoustid-server/meta.full.$LATEST.csv' DELIMITER ' ,' CSV HEADER" 。
p
但是現在檔案是jsonl檔案,每一行都是這樣的
{"id":339058430, "track": "Track14", "artist": "Unknown Artist", "Album": "未知標題", "專輯作者": "未知藝術家", "曲目":14, "碟號":null, "年份":null}。
我如何安全地匯入這些檔案,我已經嘗試用sed作為一種變通方法,將檔案轉換為csv,但不太正確
cat $LATEST-meta-update.jsonl|sed
-e 's/{"id"://'>
-e 's/"track"://'
-e 's/"artist"://'
-e 's/"album"://'
-e 's/"Album_artist"://'
-e 's/"track_no"://'
-e 's/"disc_no"://'
-e 's/"year"://'
-e 's/"/g' >/span>meta.csv
另外,我有5個不同的表要匯入,所以必須為每個表構建sed。
更新如果是一個新的記錄要被添加到表中,將有
"created": "2020-02-01T00:00:13.225963 00:00"
但如果記錄需要替換現有的記錄將有
"uped": "2020-02-03T13:20:12.988533 00:00"
當使用交叉連接populate_from_json進行插入時,我如何使用where子句來限制只使用有創建欄位的?
uj5u.com熱心網友回復:
如果你只需要在Postgres中這樣做,請創建帶有中間表的輔助模式,就像這樣:
create schema jsons;
create table jsons.acoustid_meta(data jsonb);
復制檔案到中間表:
copy jsons.acoustid_meta from ...
然后用Postgres腳本決議jsons:
insert into musicbrainz.acoustid_meta
select id, track, artist, album, album_artist, track_no, disc_no, year
from jsons.acoustid_meta
cross join jsonb_populate_record(null::musicbrainz.acoustid_meta, data)。
truncate jsons.acoustid_meta;
更新。你可以通過參考data來檢查json值,例如:
insert into musicbrainz.acoustid_meta
select id, track, artist, album, album_artist, track_no, disc_no, year
from jsons.acoustid_meta
cross join jsonb_populate_record(null::musicbrainz.acoustid_meta, data)
where data-> 'created' is not null;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/322789.html
標籤:
上一篇:型別時間的無效輸入語法,或者是
