postgis - 将几何从 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 进行彻底检查?
解决方案
该语法对 Postgres 完全无效(也不是有效的标准 SQL)。您似乎盲目地从 SQL Server 复制了该定义
- 字符串连接运算符
||
在 SQL 中,而不是+
. - 方括号对 SQL 中的标识符无效。
- Postgres 没有
CLUSTERED
索引。
但最重要的是:Postgres 当前(Postgres 11)没有计算(生成)列,因此您无法将列定义为使用时计算的Shape AS <expression>
它们将在即将发布的第 12 版(将于 2019 年第四季度发布)中提供。
有关的: