PostgreSQL COPY FROM STDIN 表达式

标签 postgresql postgis

我正在尝试使用 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/

相关文章:

python - 使用 Plone 发布地理空间数据

python - Geoalchemy2 和 ST_Within - 点和多边形之间的类型不匹配?

node.js - 通过 nodejs 和 websockets 将功能从 openlayers 保存到 postgis

postgresql - 需要帮助编写 PostgreSQL 触发器函数

python - geodjango(postgis)中两个3D点之间的距离

postgresql - 通过添加月份来计算 Postgres 中的日期?

postgresql - 如何修复此 PostgreSQL 9.1 存储过程?

sql - 在 pgAdmin 3 中定义 ON DELETE CASCADE

postgresql - 在 postgresql 9.2 的 tztsrange 中使用 now() 作为默认值

postgresql - Postgres - UNION ALL 与 INSERT INTO 哪个更好?