通过psql将固定宽度的文件复制到PostgreSQL表-错误:对于类型字符

我有一个U.S. Census固定宽度的文件。这是zip中的一个名为“ orgeo2010.sf1”的文件。 zip是一个大文件。我想将该文件读入PostgreSQL 12.1中的表中。这就是我建立表格的方式。

create table census_2010.geo_header_sf1
 (
    fileid          varchar(6),stusab          varchar(2),sumlev          varchar(3),geocomp         varchar(2),chariter            varchar(3),cifsn           varchar(2),logrecno            integer PRIMARY KEY,region          varchar(1),division            varchar(1),state           varchar(2),county          varchar(3),countycc            varchar(2),countysc            varchar(2),cousub          varchar(5),cousubcc            varchar(2),cousubsc            varchar(2),place           varchar(5),placecc         varchar(2),placesc         varchar(2),tract           varchar(6),blkgrp          varchar(1),block           varchar(4),iuc         varchar(2),concit          varchar(5),concitcc            varchar(2),concitsc            varchar(2),aianhh          varchar(4),aianhhfp            varchar(5),aianhhcc            varchar(2),aihhtli         varchar(1),aitsce          varchar(3),aits            varchar(5),aitscc          varchar(2),ttract          varchar(6),tblkgrp         varchar(1),anrc            varchar(5),anrccc          varchar(2),cbsa            varchar(5),cbsasc          varchar(2),metdiv          varchar(5),csa         varchar(3),necta           varchar(5),nectasc         varchar(2),nectadiv            varchar(5),cnecta          varchar(3),cbsapci         varchar(1),nectapci            varchar(1),ua          varchar(5),uasc            varchar(2),uatype          varchar(1),ur          varchar(1),cd          varchar(2),sldu            varchar(3),sldl            varchar(3),vtd         varchar(6),vtdi            varchar(1),reserve2            varchar(3),zcta5           varchar(5),submcd          varchar(5),submcdcc            varchar(2),sdelem          varchar(5),sdsec           varchar(5),sduni           varchar(5),arealand            integer,areawatr            integer,name            varchar(90),funcstat            varchar(1),gcuni           varchar(2),pop100          integer,hu100           integer,intptlat            varchar(11),intptlon            varchar(12),lsadc           varchar(2),partflag            varchar(1),reserve3            varchar(6),uga         varchar(5),statens         varchar(8),countyns            varchar(8),cousubns            varchar(8),placens         varchar(8),concitns            varchar(8),aianhhns            varchar(8),aitsns          varchar(8),anrcns          varchar(8),submcdns            varchar(8),cd113           varchar(2),cd114           varchar(2),cd115           varchar(2),sldu2           varchar(3),sldu3           varchar(3),sldu4           varchar(3),sldl2           varchar(3),sldl3           varchar(3),sldl4           varchar(3),aianhhsc            varchar(2),csasc           varchar(2),cnectasc            varchar(2),memi            varchar(1),nmemi           varchar(1),puma            varchar(5),reserved            varchar(18)
);

我尝试直接通过以下方式从文件中读取内容:

Decennial_2010=# COPY census_2010.geo_header_sf1
Decennial_2010-# FROM 'D:\projects_and_data\data\PostgreSQL\data\data\or2010.sf1\orgeo2010.sf1';
ERROR:  value too long for type character varying(6)
CONTEXT:  COPY geo_header_sf1,line 1,column fileid: "SF1ST OR04000000  00000014941      

当那不起作用时,我想也许可以将其导入R(我知道足够的R来操纵R)并对其进行编辑并编写一个新的F.W.F。文件。我尝试使用新文件并获得了相同的结果。

Decennial_2010=# COPY census_2010.geo_header_sf1
Decennial_2010-# FROM 'D:/projects_and_data/data/PostgreSQL/data/data/geo_a' CSV HEADER;
ERROR:  value too long for type character varying(6)
CONTEXT:  COPY geo_header_sf1,line 2,column fileid: "SF1ST OR 40000     14941  

这是数据帧的第一行,其中将文件保存在R中,并用write.fwf()来写入无效的新文件。我知道我应该使用dput(td[1,]),但是它会打印所有行(200,000+)中所有因子的所有级别,然后dput()的输出甚至不适合所有可打印空间控制台。因此,我将复制并粘贴默认情况下显示的行。抱歉。

td[1,]
  fileid stusab sumlev geocomp chariter cifsn logrecno region division state
1 SF1ST      OR     40      00        0    NA        1      4        9    41
  county countycc countysc cousub cousubcc cousubsc place placecc placesc tract
1     NA                NA     NA                NA    NA              NA    NA
  blkgrp block iuc concit concitcc concitsc aianhh aianhhfp aianhhcc aihhtli
1     NA    NA  NA     NA       NA       NA     NA       NA                 
  aitsce aits aitscc ttract tblkgrp anrc anrccc cbsa cbsac metdiv csa necta
1     NA   NA     NA                  NA     NA   NA    NA     NA  NA    NA
  nectasc nectadiv cnecta cbsapci nectapci ua uasc uatype ur cd sldu sldl vtd
1      NA       NA     NA                  NA   NA     NA NA NA   NA   NA  NA
  vtdi reserve2 zcta5 submcd submcdcc sdelem sdsec sduni     arealand
1            NA    NA     NA       NA     NA    NA    NA 248607802255
    areawatr
1 6191433228
                                                                                        name
1 Oregon                                                                                    
  funcstat gcuni  pop100   hu100 intptlat  intptlon lsadc partflag reserve3 uga
1        A     ! 3831074 1675562 43.97152 -120.6226    00                NA  NA
  statens countyns cousubns placens concitns aianhhns aitsns anrcns submcdns
1 1155107       NA       NA      NA       NA       NA     NA     NA       NA
  cd113 cd114 cd115 sldu2 sldu3 sldu4 sldl2 sldl3 sldl4 aianhhsc csasc cnectasc
1    NA    NA    NA    NA    NA    NA    NA    NA    NA       NA    NA       NA
  memi nmemi puma reserved
1   NA    NA   NA       NA


library(gdata)
write.fwf(td,"D:/projects_and_data/data/PostgreSQL/data/data/geo_a",sep="")

要在表或起始文件中进行什么更改才能将文件复制到PostgreSQL中的表中?

morenming 回答:通过psql将固定宽度的文件复制到PostgreSQL表-错误:对于类型字符

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2884237.html

大家都在问