我设置了这样一张桌子。
CREATE TABLE IF NOT EXISTS details (
CountyCode CHAR(3) NOT NULL,
VoterID CHAR(10) NOT NULL UNIQUE,
NameLast TEXT,
NameSuffix TEXT,
NameFirst TEXT,
NameMiddle TEXT,
PublicRecordExemption CHAR(1),
ResidenceAddressLine1 TEXT,
ResidenceAddressLine2 TEXT,
ResidenceCity TEXT,
ResidenceState TEXT,
ResidenceZipcode TEXT,
MailingAddressLine1 TEXT,
MailingAddressLine2 TEXT,
MailingAddressLine3 TEXT,
MailingCity TEXT,
MailingState CHAR(2),
MailingZipcode TEXT,
MailingCountry TEXT,
Gender CHAR(1),
Race CHAR(1),
BirthDate CHAR(10),
RegistrationDate CHAR(10),
PartyAffiliation CHAR(3),
Precinct CHAR(6),
PrecinctGroup CHAR(3),
PrecinctSplit CHAR(6),
PrecinctSuffix CHAR(3),
VoterStatus CHAR(3),
CongressionalDistrict CHAR(3),
HouseDistrict CHAR(3),
SenateDistrict CHAR(3),
CountyCommissionDistrict CHAR(3),
SchoolBoardDistrict CHAR(2),
DaytimeAreaCode CHAR(3),
DaytimePhoneNumber CHAR(7),
DaytimePhoneExtension CHAR(4),
Emailaddress TEXT
);
我运行此命令以从制表符分隔的文件Detail.txt
导入数据。
\copy details FROM Detail.txt;
几秒钟后,命令行控制台会发出此错误。
ERROR: value too long for type character(2)
CONTEXT: COPY details, line 449121, column mailingstate: "273707216"
。
Here's line 449121 copied into a pastebin
该错误表示PSQL尝试将值273707216
读入mailingstate
列,其长度为两个字符。我以为PSQL会将NC
读入该列。
为什么PSQL读错了这行?
答案 0 :(得分:0)
我认为问题在于该行的这些字段。
Hand Dr \ Melbourne
该数据中的反斜杠后面紧跟一个选项卡。对于复制函数,它看起来像\ t,双反斜杠可能被视为转义字符,而不是字段分隔符,因此会" eat"向上一列,从而将mailingZipcode放入mailingState列。
尝试删除该反斜杠并尝试重新导入该行。