`ERROR:运行`\ copy`

时间:2017-09-03 06:22:58

标签: postgresql psql

我设置了这样一张桌子。

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读错了这行?

1 个答案:

答案 0 :(得分:0)

我认为问题在于该行的这些字段。

Hand Dr      \  Melbourne

该数据中的反斜杠后面紧跟一个选项卡。对于复制函数,它看起来像\ t,双反斜杠可能被视为转义字符,而不是字段分隔符,因此会" eat"向上一列,从而将mailingZipcode放入mailingState列。

尝试删除该反斜杠并尝试重新导入该行。