PostgreSQL COPY 命令从 csv 文件获取数组数据问题

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

我正在致力于将数据从 MongoDB 迁移到 PostgreSQL。我使用 mongoexport 命令将集合导出到 CSV 文件中,然后尝试使用 COPY 命令将数据从 CSV 文件导入到 PostgreSQL 表中。

默认情况下,CSV 文件中的数组字段格式为“[""val1"",""val2""]"。当我尝试使用此 CSV 文件执行 COPY 命令时,出现以下错误:

ERROR:  "[" must introduce explicitly-specified array dimensions.malformed array literal: "["TRT100925T18"]" 

ERROR:  malformed array literal: "["TRT100925T18"]"
SQL state: 22P02
Detail: "[" must introduce explicitly-specified array dimensions.
Context: COPY sgmk_hazine_tanim, line 2, column isins: "["TRT100925T18"]"

为了解决这个问题,我手动将 Notepad++ 中的数组格式更正为 {val1,val2}。但是,当我再次运行 COPY 命令时,我收到另一个错误,因为数组中的逗号被解释为新字段:

ERROR:  extra data after last expected column
CONTEXT:  COPY sgmk_hazine_tanim, line 5: "2024-09-24T05:50:00.114Z,2025-03-11T21:00:00.000Z,121,{TRT120325T12,TRT120325T20},121T2,85.640,4" 

SQL state: 22P04

这是我的表格结构:

CREATE TABLE sgmk_hazine_tanim (                   
    id int GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
    last_update timestamp NOT NULL,
    matDate date NOT NULL,
    section smallint NOT NULL,
    isins text[] NOT NULL,
    CBRTCode VARCHAR(32) NOT NULL,
    presVal VARCHAR(32) NOT NULL,
    payRate NUMERIC(8,4)
);

前几行的 sgmk_hazine_tanim.csv 文件如下所示:

last_update,matDate,section,isins,CBRTCode,presVal,payRate
2024-09-24T05:50:00.114Z,2025-09-09T21:00:00.000Z,111,{TRT100925T18},13T,69.782,
2024-09-24T05:50:00.114Z,2024-10-15T21:00:00.000Z,111,{TRT161024T10},15T,97.120,
2024-09-24T05:50:00.114Z,2025-04-08T21:00:00.000Z,111,{TRT090425T16},15T,80.060,
2024-09-24T05:50:00.114Z,2025-03-11T21:00:00.000Z,121,{TRT120325T12,TRT120325T20},121T2,85.640,4

这是我的复制命令:

COPY sgmk_hazine_tanim(last_update,matDate,section,isins,CBRTCode,presVal,payRate) FROM '/home/srvadmin/docker/build/aktarimlar/sgmk_hazine_tanim.csv' DELIMITER ',' CSV HEADER;

这是我使用的 mongoexport 命令:

mongoexport --uri=$URI --authenticationDatabase=$AUTH_DB --db=$DB_NAME --collection=$COLLECTION_NAME --type=csv --fields=$FIELDS --out=$OUTPUT_FILE

我考虑将 CSV 分隔符从逗号更改为竖线 (|) 以及复制命令,这可能有助于解决问题,但我不想处理这个问题。如果您对如何处理此问题有任何知识或建议,我将不胜感激。

sql postgresql mongodb csv mongoexport
1个回答
0
投票

我通过使用记事本++将格式从

"[""val1"",""val2""]"
更改为
"{""val1"","val2""}"
解决了问题,复制命令导入它没有任何问题

© www.soinside.com 2019 - 2024. All rights reserved.