我正在尝试导入从PgAdmin导入的以下csv文件。
CSV文件:
"id";"email";"password";"permissions";"activated";"activation_code";"activated_at";"last_login";"persist_code";"reset_password_code";"first_name";"last_name";"created_at";"updated_at"
"11";"test.teset@gmail.com";"$2y$10$gNfDFVCgqhQzCgKoiLuKfeskyCUPzK1akJvk6PdXt1DmMJooCuYpi";"";"t";"XY56HNcFHeAcAwzUhleYhvVbxxmOaMr57ifYEhxiUd";"";"2014-05-27 08:47:33";"$2y$10$g0LnAStmA/kEWuhNDfWleOjQeyo9maGvvIlfiJms/KpRiPAdfBWHm";"";"";"";"2014-05-27 07:51:07";"2014-05-27 08:47:33"
"5";"test@gmail.com";"$2y$10$dXODoI520pddcmiSXcS/OuiH.4K/87LEXeQRzvUl2k/Uth2HumpNy";"";"t";"4k8s1TbgrPfAMcNozVEP19MOQkCApQ0LA8bhGkF55A";"";"2014-05-21 21:18:06";"$2y$10$CefSnbQIzAJBo5PfbMdzKuhzpW17fHqh/frWabmljzJvv0A5Vkt1O";"";"";"";"2014-05-21 21:17:45";"2014-05-22 19:12:01"
这是我用来导入CSV文件的命令,
DROP TABLE users;
CREATE TABLE users
(
id serial NOT NULL,
email character varying(255) NOT NULL,
password character varying(255) NOT NULL,
permissions text,
activated boolean NOT NULL DEFAULT true,
activation_code character varying(255),
activated_at timestamp without time zone,
last_login timestamp without time zone,
persist_code character varying(255),
reset_password_code character varying(255),
first_name character varying(255),
last_name character varying(255),
created_at timestamp without time zone,
updated_at timestamp without time zone
);
COPY users (email,password,permissions,activated,activation_code,activated_at,last_login,persist_code,reset_password_code,first_name,last_name,created_at,updated_at)
FROM 'D:/test/db_backup/data_csv.csv' WITH CSV HEADER delimiter ';'
;
但是我得到了以下错误,不知道为什么。
**ERROR: extra data after last expected column SQL state: 22P04**
请告诉我这里的问题是什么?
答案 0 :(得分:3)
因为您的副本语句中有14列数据但只有13列。具体而言,您缺少副本陈述中的ID列。如果数据的顺序与表中声明的顺序相同,则无需将列名放在复制表中。
COPY users FROM 'D:/test/db_backup/data_csv.csv' CSV HEADER delimiter ';' null '\N';
在你的情况下会正常工作 - 注意你也不需要WITH。
EDIT。您需要显式设置null值,如null'\ N'。如果使用“”,则可能会出现如下错误:“CSV引号字符不得出现在NULL规范中”。此外,您只能在CSV模式下指定HEADER,因此如果您想使用HEADER和CSV,则不能使用“”作为分隔符,并且必须使用显式空值'\ N'。
我已经更新了我的原始答案,包含了这个并导入了您的样本数据,用\ N替换了所有“”。