将大型CSV文件导入PostGIS


12

我正在尝试将CS​​V文件导入PostGIS。在这篇文章之后,我之前已经创建了表。我发现其他建议说我可以运行copy命令。

如果我运行此命令:

COPY table FROM '/Users/macbook/file.csv' DELIMITERS ',' CSV HEADER;

它根本没有复制表格。它说“表”未被识别。

我尝试了这个:

COPY moulding
(Borough,Block,Lot,CD,CT2010,CB2010,SchoolDist,Council,ZipCode,FireComp,PolicePrct,Address,ZoneDist1,ZoneDist2,ZoneDist3,ZoneDist4,Overlay1,Overlay2,SPDist1,SPDist2,LtdHeight,AllZoning1,AllZoning2,SplitZone,BldgClass,LandUse,Easements,OwnerType,OwnerName,LotArea,BldgArea,ComArea,ResArea,OfficeArea,RetailArea,GarageArea,StrgeArea,FactryArea,OtherArea,AreaSource,NumBldgs,NumFloors,UnitsRes,UnitsTotal,LotFront,LotDepth,BldgFront,BldgDepth,Ext,ProxCode,IrrLotCode,LotType,BsmtCode,AssessLand,AssessTot,ExemptLand,ExemptTot,YearBuilt,BuiltCode,YearAlter1,YearAlter2,HistDist,Landmark,BuiltFAR,ResidFAR,CommFAR,FacilFAR,BoroCode,BBL,CondoNo,Tract2010,XCoord,YCoord,ZoneMap,ZMCode,Sanborn,TaxMap,EDesigNum,APPBBL,APPDate,PLUTOMapID,Version)
FROM
'/Users/macbook/file.csv'
DELIMITERS
','
CSV HEADER;

但也没有用。

可以从以下链接下载此类数据集的示例:

我应该创建一个模型然后执行吗?


3
您是否尝试过COPY moulding FROM '/Users/macbook/file.csv' DELIMITERS ',' CSV HEADER;
Underdark

table在公共模式中是否有一个命名的表?
路易斯·德·索萨

不行 我正在尝试使用复制功能导入该文件。
user3001937 2014年

您是否真的在使用CSV或Shapefile?您的问题是CSV,但示例为shp。此外,您使用的是哪个版本的Postgis?
BradHards 2014年

@BradHards:如果下载文件,我会找到带有CSV扩展名的文件。我使用最新版本的Postgis。psql(9.3.1,服务器9.3.2)
user3001937 2014年

Answers:


10

您快到了,但是我认为问题可能出在您要加载的表中。

您必须已经在PostGIS中创建了具有正确列类型的表

例如

CREATE TABLE nycdata (
    BOROUGH varchar,
    BLOCK varch,
    DATE date,
    VERSION numeric);

但是您需要将列类型与CSV中的相同数据类型进行匹配。

您可以在此处查看所有数据类型http://www.postgresql.org/docs/9.1/static/datatype.html

创建表后,您可以使用原始命令

COPY nycdata FROM '/Users/macbook/data.csv' DELIMITERS ',' CSV HEADER;

然后,您将需要创建索引和几何


4

GDAL也可以使用.vrt文件来完成此操作,尽管它可能会占用大量内存。

您的vrt看起来像:

<OGRVRTDataSource> 
<OGRVRTLayer name="feature_name"> 
    <SrcDataSource>your_csv.csv</SrcDataSource> 
    <GeometryType>wkbPoint</GeometryType> 
    <LayerSRS>EPSG:27700</LayerSRS> 
    <GeometryField encoding="PointFromColumns" x="Eastings" y="Northings"/> 
</OGRVRTLayer> 

然后简单地:

ogr2ogr -progress -nln table_name_doesnt_need_to_exist -skipfailures  PostgreSQL PG:"dbname='dbname' host='localhost' port='5432'  user='username' password='password'" vrt_filename.vrt

有关完整指南,请参见:

将CSV OS CodePoint数据加载到PostGIS中

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.