我试图使用COPY FROM STDIN将数据导入到我的表中 . 我表中的一列是几何类型 . 我的命令看起来像这样......
COPY "WeatherStations" ("Station_ID", "Station_Code", "Station_Name", "Station_Location") FROM stdin;
1 KAVP WILKES-BARRE ST_GeomFromText('POINT(41.338055 -75.724166)')
2 KOKV WINCHESTER ST_GeomFromText('POINT(39.143333 -78.144444)')
3 KSHD SHENANDOAH ST_GeomFromText('POINT(38.263611 -78.896388)')
...
但是,我认为它试图插入文本“ST_GeomFromText('POINT ...”并且失败而不是评估表达式并插入表达式的结果 . 有没有人知道这里可能会发生什么以及如何获得插入实际的geoms?
4 回答
我很难弄清楚如何使用COPY FROM STDIN命令将几何数据批量复制/加载到PostGIS中,我找不到关于此主题的官方文档 .
在批量加载期间更改列(the ALTER TABLE / SET DATA TYPE / USING)对我来说不是一个选项,因为它对于Geometry类型是only supported in PostGIS 2.0+,也不是use of a temporary table可接受的 .
确实有一种直接的方法(至少在PostGIS 1.5.2中) . 您只需使用Geometry数据的简单WKT(已知文本)表示,就可以通过这种方式重写复制语句的数据:
如果您在几何列上强制执行SRID约束,则必须使用以下语法(在此示例中SRID为4326),称为EWKT(扩展的已知文本,即PostGIS specific format):
结束注释:“POINT”和左括号“(”之间必须没有空格,否则COPY仍会返回错误,表示您的几何数据格式无效 .
您可以省略包装文本的函数,导入带有text列的临时表,然后使用在该步骤中执行转换的函数将INSERT / SELECT运行到永久表中 .
Point的值看起来像这样:
0101000020E6100000DA722EC555552B40CDCCCCCCCC0C4840
.我通常在表中保留
latitude
和longitude
列,并使用触发器构建空间数据 .我不知道如何从stdin复制
POINT
s .您将保留
.csv
文件中的所有值并尝试这样:这会奏效 .