我正在致力于将数据从 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 分隔符从逗号更改为竖线 (|) 以及复制命令,这可能有助于解决问题,但我不想处理这个问题。如果您对如何处理此问题有任何知识或建议,我将不胜感激。
我通过使用记事本++将格式从
"[""val1"",""val2""]"
更改为"{""val1"","val2""}"
解决了问题,复制命令导入它没有任何问题