将几何体从 T-SQL 转换为 Postgres

Convert Geometry from T-SQL to Postgres

我有这个专栏用于从 SQL 服务器创建几何:

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

我需要创建从 SQL 服务器到 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 进行全面检查?

该语法对 Postgres 完全无效(并且也不是有效的标准 SQL)。看来你是盲目地从 SQL 服务器

复制了那个定义
  • SQL中的字符串连接运算符是||,不是+
  • 方括号对于 SQL 中的标识符无效。
  • Postgres 没有 CLUSTERED 索引。

但最重要的是:Postgres 当前 (Postgres 11) 没有计算(生成)列,因此您不能使用 Shape AS <expression>

将列定义为计算列

它们将在即将发布的第 12 版中提供(将在 Q4/2019 中发布)。

相关:

  • PostgreSQL: creating a generated column
  • Computed / calculated / virtual / derived columns in PostgreSQL