我正在尝试使用 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 吗?
最佳答案
我花了很长时间弄清楚如何使用 COPY FROM STDIN 命令将几何数据批量复制/加载到 PostGIS 中,我找不到关于这个主题的官方文档。
在批量加载期间更改列 ( the ALTER TABLE / SET DATA TYPE / USING ) 对我来说不是一个选项,因为它是 only supported in PostGIS 2.0+对于几何类型,use of a temporary table 也 Not Acceptable .
确实有一种直接的方法(至少在 PostGIS 1.5.2+ 中)。 您可以通过这种方式简单地重写复制语句的数据,使用简单的 WKT(知名文本)表示您的几何数据:
1 KAVP WILKES-BARRE POINT(41.338055 -75.724166)
2 KOKV WINCHESTER POINT(39.143333 -78.144444)
3 KSHD SHENANDOAH POINT(38.263611 -78.896388)
如果您对几何列强制执行了 SRID 约束,则必须使用以下语法(在此示例中,SRID 为 4326)称为 EWKT(扩展知名文本,即 PostGIS specific format):
1 KAVP WILKES-BARRE SRID=4326;POINT(41.338055 -75.724166)
2 KOKV WINCHESTER SRID=4326;POINT(39.143333 -78.144444)
3 KSHD SHENANDOAH SRID=4326;POINT(38.263611 -78.896388)
结束语:“POINT”和左括号“(”之间不能有空格,否则 COPY 仍会返回错误,指出您的几何数据格式无效。
关于PostgreSQL COPY FROM STDIN 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10216891/