我主要是数据库的新手,并且正在构建一系列课程中学生成绩的 postgres 数据库。我的数据库使用一种称为“类”的类型,它由课程、学期(年和季度)和节号(1,2,3,...)组成,例如('Bio 101', (17, 'F'),1)。我正在尝试将包含此类数据的 CSV 复制到表中,并收到一条错误消息,提示ERROR: extra data after last expected column
. 我试过 pgAdmin III 导入向导、COPY 和 \copy,结果都一样。但是,手动从文件中复制一行并导入它(使用适当的括号)可以正常工作。发生了什么事,我能做什么?
这是表格和一些数据:
CREATE TABLE public."GradedItems"
(
class class NOT NULL,
category text NOT NULL,
"number" smallint NOT NULL DEFAULT 1,
topic text[],
points integer,
weight double precision, -- Weight of item within category
CONSTRAINT primary_key PRIMARY KEY (class, category, number)
)
'class','category','number','points'
('LS 30A', (18, 'W'), 2),'Homework',1,60
('LS 30A', (18, 'W'), 2),'Homework',2,36
发生的情况是列名称数和数据中的列数不匹配。如果没有关于如何生成 csv 以及如何导入的信息,很难说,但是假设 csv 上的分隔符是逗号字符,这就是数据库插入操作试图做的事情:它读取这个
'class','category','number','points'
并学习如何映射四列。然后,当它到达第二行时,它会用逗号分割数据,因此它将该行解释为其中
||
表示值之间的中断。它将命令解释为:...然后它不知道如何处理其余数据,因为它不适合。
我的建议是使用不同的分隔符。这将取决于如何生成 csv 你如何做到这一点。