COPY JSON 格式的 CSV 行到 Postgres 中的临时表

问题描述 投票:0回答:0

我有一个 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 格式的行复制到临时表中?

java postgresql csv jdbi
© www.soinside.com 2019 - 2024. All rights reserved.