首页 > 解决方案 > 尝试创建物化视图时在“Z”处或附近出现语法错误

问题描述

我有以下查询:

CREATE MATERIALIZED VIEW tk AS
SELECT * 
FROM base
WHERE ST_Contains(geo, POLYGON Z ((...some values ...)))

但我收到错误:

syntax error at or near "Z"

geo字段是geometry字段类型

问题是什么以及如何解决?

标签: postgresqlpostgis

解决方案


您的查询缺少单引号:

例子:

CREATE TABLE base (geo geometry);
INSERT INTO base VALUES ('POLYGONZ((1 0 0, 0 5 0, 5 5 0, 5 0 0, 1 0 0))');

CREATE MATERIALIZED VIEW tk AS
SELECT * FROM base
WHERE 
  ST_Contains (geo,'POLYGONZ((2.51 3.33 1,2.07 2.24 1,3.28 2.26 1,2.51 3.33 1))');

SELECT ST_AsText(geo) FROM tk;

                  st_astext                  
---------------------------------------------
 POLYGON Z ((1 0 0,0 5 0,5 5 0,5 0 0,1 0 0))
(1 Zeile)

注意: 的文档ST_Contains没有提到任何关于Z在函数中计算维度的内容。因此我们可以假设它被简单地忽略并且查询只是考虑XY考虑。


推荐阅读