Postgresql

如何在 postgres 複製語句中引用數組以插入 JSON 欄位

  • December 17, 2021

我有一些看起來像這樣的數據:

id,bo,c,url
1,"some text here", 22, "[{'id': 'NfKA3', 'u': 'https://somewebsite.com'}]"
2, "more text", 83, "[{'id': 'W3nAl', 'u': 'https://anotherwebsite.com'}]"
3, "even more text", 14, "[{'id': 'CyrMj', 'u': 'https://yetanotherwebsite.com'}]"

我正在嘗試將此數據插入到如下所示的表中:

CREATE TABLE myTable(
id integer, 
body varchar, 
count, varchar, 
url JSON
);

使用此命令:

\copy mytable FROM 'myData.csv' WITH DELIMITER ',' csv header;

但是,我在使用urlcsv 欄位中的單引號時遇到了問題。我收到這樣的錯誤:

ERROR:  invalid input syntax for type json
DETAIL:  Token "'" is invalid.
CONTEXT:  JSON data, line 1: [{'...

有人可以告訴我建構\COPY命令的正確方法,以便能夠url將 csv 中的欄位作為 JSON 載入嗎?

如有必要,我可以在命令行對文件進行一些預處理。

JSON 使用雙引號"來分隔鍵和字元串:

[{"id": "NfKA3", "u": "https://somewebsite.com"}]

CSV 使用雙引號轉義雙引號的""意思"

1,"some text here", 22, "[{""id"": ""NfKA3"", ""u"": ""https://somewebsite.com""}]"

看看:https ://stackoverflow.com/questions/17808511/properly-escape-a-double-quote-in-csv

使用數據庫腳本而不是 csv:

with v (id,bo,c,url) as 
(values 
( 1,'some text here', 22, cast('[{ "id": "NfKA3", "u": "https://somewebsite.com"}]' as json)),
( 2,'some text here', 83, cast('[{ "id": "W3nAl", "u": "https://somewebsite.com"}]' as json))
) 
insert into myTable select * from v;

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