使用 \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
\.
我正在尝试使用 \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
\.