使用 \COPY 将带有 JSON 字段的 CSV 加载到 Postgres

Using \COPY to load CSV with JSON fields into Postgres

我正在尝试使用 \COPY 命令将文件中的 TSV 数据加载到 Postgres table。

这是一个示例数据行:

2017-11-22 23:00:00     "{\"id\":123,\"class\":101,\"level\":3}"

这是我正在使用的 psql 命令:

\COPY bogus.test_table (timestamp, sample_json) FROM '/local/file.txt' DELIMITER E'\t'

这是我收到的错误:

ERROR:  invalid input syntax for type json
DETAIL:  Token "sample_json" is invalid.
CONTEXT:  JSON data, line 1: "{"sample_json...
COPY test_table, line 1, column sample_json: ""{\"id\":123,\"class\":101,\"level\":3}""

我验证了 JSON 的 JSON 格式正确并阅读了几个类似的问题,但我仍然不确定这里发生了什么。一个解释会很棒

你的 json 被引用了。它不应该有周围的 " 个字符,并且字段名称周围的 " 个字符不应该被转义。

它应该是这样的:

2017-11-22 23:00:00 {"id":123,"class":101,"level":3}

按原样加载数据文件:

\COPY bogus.test_table (timestamp, sample_json) FROM '/local/file.txt' CSV DELIMITER E'\t' QUOTE '"' ESCAPE '\'

Aeblisto 的回答几乎解决了我疯狂的 JSON 字段的问题,但只需要修改一小部分 - 带反斜杠的引述 - 在这里完整形式:

COPY "your_schema_name.yor_table_name" (your, column_names, here) 
FROM STDIN 
WITH CSV DELIMITER E'\t' QUOTE E'\b' ESCAPE '\';
--here rows data
\.