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

时间:2017-11-16 22:17:06

标签: json postgresql csv psql postgresql-9.4

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

这是一个示例数据行:

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格式并阅读了几个类似的问题,但我仍然不确定这里发生了什么。解释会很棒

3 个答案:

答案 0 :(得分:5)

按原样加载数据文件:

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

答案 1 :(得分:1)

引用你的json。它不应该包含"个字符,字段名称周围的"字符也不应该被转义。

它应该是这样的:

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

答案 2 :(得分:1)

Aeblisto的答案几乎可以解决我疯狂的JSON字段的问题,但只需要修改一点-带反斜杠的QUOTE -此处为完整格式:

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
\.