【问题标题】:How to know which argument of function is a column in the table in PostgreSQL?如何知道函数的哪个参数是PostgreSQL表中的列?
【发布时间】:2020-06-04 07:25:02
【问题描述】:

我正在将 PostgreSQL 与 GisT 和 PostGIS 一起使用,我想找到与查询几何的距离在阈值内的几何。所以首先,我应该扩展查询的边界框,其次,我应该将扩展的边界框传递到 Gist 索引中。

我认为这两个查询的语言含义:SELECT * FROM table WHERE DWithin(querygeom, table.col)SELECT * FROM table WHERE DWithin(table.col, querygeom) 是相同的,其中 tabel.col 是几何列,而 querygeom 是我传入的静态几何。但是,正如我所拥有的table.col 上的 GisT 索引,我想始终扩展查询,而不是列,以便使用索引。 (如果我理解正确,如果我展开该列内的框,我不能使用索引?)

这有什么办法吗?比如使用规则重写查询?

【问题讨论】:

  • "我想始终扩展查询,而不是列" - 该语句没有意义(至少对我而言)。 ST_DWithin 的参数只是“值”——它们都不是“表”或“查询”。
  • 您能否详细说明queryST_DWithin 的参数?您的意思是返回单个几何的子查询吗?
  • @JimJones 抱歉误导,我只是使用“查询”来代表我传递给函数的另一个几何图形...修改了问题。
  • @a_horse_with_no_name 错误,我的意思是一列几何图形
  • @JimJones 非常感谢,我发现我误解了它的逻辑

标签: postgresql indexing gis postgis


【解决方案1】:

我想我找到了这个答案... 它使用对称公式:

'SELECT $1 OPERATOR(@extschema@.&&) @extschema@.ST_Expand($2,$3) AND $2 OPERATOR(@extschema@.&&) @extschema@.ST_Expand($1,$3) AND @extschema@._ST_DWithin($1, $2, $3)'

所以任何一方都可以使用该索引(我猜计算成本更高)

【讨论】:

    猜你喜欢
    • 2020-11-14
    • 2014-02-07
    • 2022-12-03
    • 1970-01-01
    • 1970-01-01
    • 2021-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多