首页 > 解决方案 > 将几何从 T-SQL 转换为 Postgres

问题描述

我有此列用于从 SQL Server 创建几何:

Shape  AS ([geometry]::STGeomFromText(((('POINT('+CONVERT([varchar](20);,Longitude))+' ')+CONVERT([varchar](20),Latitude))+')',(4326))), PRIMARY KEY CLUSTERED 

我需要创建从 SQL Server 到 Postgres 的列:

CREATE EXTENSION postgis;

CREATE EXTENSION postgis_topology;

我还将 STGeomFromText 更改为 ST_GeomFromText 但在 pgAdmin 中出现错误:

ERROR:  syntax error at or near "AS"
LINE 32:  Shape  AS ([geometry]::STGeomFromText(((('POINT('+CONVERT([...
             ^

********** Error **********

ERROR: syntax error at or near "AS"
SQL state: 42601
Character: 818

我是否错过了为 postgis 安装的东西,或者语法需要对 postgres 进行彻底检查?

标签: postgispostgresql-9.1sqlgeometry

解决方案


该语法对 Postgres 完全无效(也不是有效的标准 SQL)。您似乎盲目地从 SQL Server 复制了该定义

  • 字符串连接运算符||在 SQL 中,而不是+.
  • 方括号对 SQL 中的标识符无效。
  • Postgres 没有CLUSTERED索引。

但最重要的是:Postgres 当前(Postgres 11)没有计算(生成)列,因此您无法将列定义为使用时计算的Shape AS <expression>

它们将在即将发布的第 12 版(将于 2019 年第四季度发布)中提供。

有关的:


推荐阅读