Postgresql

將包含 (geo)JSON 元素的列導出到 CSV,同時正確保留 JSON 雙引號

  • January 20, 2022

我想使用複製表的 5 列進行導出,其中 3 列包含 ID、文本和時間戳值,但其中 2 列包含 JSON 和 GeoJSON 元素,例如:

// Please, note the non-quoted string Value1
// when there is no space in the value itself:
{"key": "value with space", "other_key": Value1, ...}

但是當使用這個命令時:

psql \
 -d <connection_uri> \
 --command "\copy public.mytable (id, json_array, geojson_field, status, timestamp) TO './file.csv' DELIMITER ';' CSV HEADER ENCODING 'UTF8' QUOTE '\"' ;"

結果看起來很奇怪:

11784,"{'"First value'",'"Second value'", ThirdValue, '"Fourth val'",...

即它以奇怪的順序放置引號:“single-double <field_value> single-double”

(我也沒有得到標題……)

我希望我可以在 csv 文件中以一個真正的 JSON 對象結束,我可以複製/粘貼到驗證器中,例如這裡沒有錯誤。

難道我做錯了什麼?

如果是,如何解決?

PG:13

copy t_jsonb to STDOUT (FORMAT CSV, QUOTE ' ', header true);

我最終以這種方式使用它, using FORCE_QUOTE,它實際上通過在需要的 JSON 鍵和值周圍放置 2 個雙引號來工作:

psql -d &lt;connection_uri&gt; \
 --command "\copy public.mytable (id, json_array, geojson_field, status, timestamp) TO './file.csv' WITH (FORMAT CSV, HEADER TRUE, DELIMITER ';', ENCODING 'UTF8', QUOTE '\"', FORCE_QUOTE (json_array, geojson_field));"

引用自:https://dba.stackexchange.com/questions/306283