我有一个 CSV 文件,每一行都是一个 JSON 并被复制到另一个临时表中。
临时表创建者:
CREATE TEMP TABLE temp_table(json_rec jsonb) ON COMMIT DROP;
线条看起来像:
{"id":300762,"name":"Ik wil buiten","short_name":"Ik wil buiten","exceptions":[{"type_id":3},{"type_id":3},{"type_id":4}]}
{"id":300762,"name":"Ik \"wil\" buiten","short_name":"Ik wil buiten","exceptions":[{"type_id":3},{"type_id":3},{"type_id":4}]}
这些行可以将双引号转义为第二行。
为了将这些行复制到临时表中,我调用了 postgres 库的方法:
public long copyIn(final String sql, InputStream from) throws SQLException, IOException {
return copyIn(sql, from, DEFAULT_BUFFER_SIZE);
}
带查询
COPY temp_table FROM STDIN
和 csv 文件作为输入流
抛出 PSQLException:
json 类型的无效输入语法详细信息:标记“wil”无效。
所以,由于默认模式是 JSON,转义双引号会破坏 json 格式。我通过以下方式将方法更改为 CSV:
COPY temp_table FROM STDIN WITH CSV
现在,“,”分隔符有问题,所以我将其更改为
COPY temp_table FROM STDIN WITH CSV DELIMITER '|'
现在,它抛出另一个 PSQLException:
错误:json 类型的输入语法无效
详细信息:令牌“id”无效。
显然它再次切换到 JSON 模式。
如何将 CSV 文件中的这些 JSON 格式的行复制到临时表中?