复制时 postgres 中最后一个预期列之后的额外数据

extra data after last expected column in postgres while copy

提问人:CrispyRice 提问时间:11/9/2023 更新时间:11/10/2023 访问量:33

问:

我不明白为什么失败了。

这是我在数据文件 lineitem.tbl 中的部分数据

1|155190|7706|1|17|21168.23|0.04|0.02|N|O|1996-03-13|1996-02-12|1996-03-22|DELIVER IN PERSON|TRUCK|egular courts above the|
1|67310|7311|2|36|45983.16|0.09|0.06|N|O|1996-04-12|1996-02-28|1996-04-20|TAKE BACK RETURN|MAIL|ly final dependencies: slyly bold |
1|63700|3701|3|8|13309.60|0.10|0.02|N|O|1996-01-29|1996-03-05|1996-01-31|TAKE BACK RETURN|REG AIR|riously. regular, express dep|
1|2132|4633|4|28|28955.64|0.09|0.06|N|O|1996-04-21|1996-03-30|1996-05-16|NONE|AIR|lites. fluffily even de|
1|24027|1534|5|24|22824.48|0.10|0.04|N|O|1996-03-30|1996-03-14|1996-04-01|NONE|FOB| pending foxes. slyly re|
1|15635|638|6|32|49620.16|0.07|0.02|N|O|1996-01-30|1996-02-07|1996-02-03|DELIVER IN PERSON|MAIL|arefully slyly ex|
2|106170|1191|1|38|44694.46|0.00|0.05|N|O|1997-01-28|1997-01-14|1997-02-02|TAKE BACK RETURN|RAIL|ven requests. deposits breach a|
3|4297|1798|1|45|54058.05|0.06|0.00|R|F|1994-02-02|1994-01-04|1994-02-23|NONE|AIR|ongside of the furiously brave acco|

这是我的目标表

                   Partitioned table "public.lineitem"
     Column      |         Type          | Collation | Nullable | Default
-----------------+-----------------------+-----------+----------+---------
 l_orderkey      | bigint                |           |          |
 l_partkey       | integer               |           |          |
 l_suppkey       | integer               |           |          |
 l_linenumber    | integer               |           |          |
 l_quantity      | double precision      |           |          |
 l_extendedprice | double precision      |           |          |
 l_discount      | double precision      |           |          |
 l_tax           | double precision      |           |          |
 l_returnflag    | character(1)          |           |          |
 l_linestatus    | character(1)          |           |          |
 l_shipdate      | date                  |           |          |
 l_commitdate    | date                  |           |          |
 l_receiptdate   | date                  |           |          |
 l_shipinstruct  | character(25)         |           |          |
 l_shipmode      | character(10)         |           |          |
 l_comment       | character varying(44) |           |          |

我在数据库中使用了以下命令

COPY public.lineitem FROM '/tmp/lineitem.tbl' WITH delimiter '|' csv;

错误是

psql: ERROR:  extra data after last expected column

我做了以下工作

  • 检查分隔符:确保“|”字符始终用作数据文件中的列分隔符,并且没有多余的分隔符或缺少分隔符。
  • 数据格式:验证每个字段是否正确用“|”字符分隔,并且数据中没有缺失或多余的字段。

我想知道如何解决它。

数据库 PostgreSQL PSQL

评论

1赞 Adrian Klaver 11/9/2023
这。结尾表示分隔符后的另一列/字段。更正 CSV 生成,使其不包含在每行末尾。egular courts above the|||
1赞 Frank Heikens 11/9/2023
或者创建一个虚拟(文本)列来接受最后一个 |作为空值。

答:

1赞 CrispyRice 11/9/2023 #1

正如 @Adrian Klaver 所评论的那样,尾随的“|”是导致错误的原因。删除后我成功了。

此数据由 dbgen 工具生成。为了避免行尾的尾随分隔符,我发现当我们可以在 dbgen 制作过程中添加标志时。TPC-H-DEOL_HANDLING