首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从标准输入表达式复制PostgreSQL

从标准输入表达式复制PostgreSQL
EN

Stack Overflow用户
提问于 2012-04-19 03:49:32
回答 4查看 16.6K关注 0票数 16

我正在尝试使用COPY FROM STDIN将数据导入到我的表中。我的表中有一列是geometry类型的。我的命令看起来像这样..。

代码语言:javascript
复制
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...“),并且失败了,而不是计算表达式并插入表达式的结果。有谁知道这里可能发生了什么以及如何插入实际的几何图形?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-06-21 19:18:38

我花了一段时间弄清楚如何使用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+中)。您可以使用几何数据的简单WKT (熟知文本)表示法,以这种方式简单地重写copy语句的数据:

代码语言:javascript
复制
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)

如果已在geometry列上强制使用SRID约束,则必须使用以下语法(在本例中,SRID为4326),称为EWKT (扩展熟知文本,它是一个PostGIS specific format):

代码语言:javascript
复制
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“和开始括号"(”之间不能有空格,否则副本仍将返回错误,指出您的几何数据格式无效。

票数 31
EN

Stack Overflow用户

发布于 2012-04-19 04:17:13

您可以省略包装文本的函数,导入到包含文本列的临时表中,然后使用在该步骤中执行转换的函数在永久表中运行INSERT/SELECT。

代码语言:javascript
复制
INSERT INTO "WeatherStations"
  ("Station_ID", "Station_Code", "Station_Name", "Station_Location")
  SELECT "Station_ID", "Station_Code", "Station_Name",
         ST_GeomFromText("Station_Location")
    FROM "TempWeatherStations";
票数 2
EN

Stack Overflow用户

发布于 2018-04-04 20:56:43

您将保留.csv文件中的所有值,并尝试如下所示:

代码语言:javascript
复制
CAT /path/file/demo.csv | psql -u <username> -h <localhost> -d<database> 
-c "COPY "WeatherStations" ("Station_ID", "Station_Code", "Station_Name", 
"Station_Location") FROM stdin;"

这将会起作用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10216891

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档