PostGIS 可以在外部表上使用空间索引吗?

J-D*_*awG 1 postgresql performance index spatial postgis query-performance

我正在尝试对一些外部空间表执行查询,这比在普通空间表上运行的时间长几个数量级,因为没有使用索引。

索引似乎正在处理非空间查询。

这是应该工作的东西还是不受支持?

Erw*_*ter 8

假设当前的 Postgres 9.6,它可以工作。

Postgres 可以使用远程 Postgres 服务器上的索引。您可能需要做的不仅仅是本地表,autovacuum 不会ANALYZE自动为远程表运行。首先阅读手册中的“远程查询优化”一章。

更详细的相关答案:

由于 PostGIS 是一个扩展Postgres 9.6 的这个新特性特别相关:

如果扩展程序在外部服务器的选项中被列入白名单,则允许发送扩展程序提供的运算符和函数以进行远程执行(Paul Ramsey)

当已知扩展存在于远程数据库中的兼容版本中时,用户可以启用此功能。它允许更有效地执行涉及扩展运算符的查询。

大胆强调我的。

索引的使用绑定到操作符。当计划查询时,各种 PostGIS 空间函数被转换为在内部使用运算符。关于SO的这个相关答案有更多解释:

假设本地和远程服务器使用 Postgres 9.6,并且安装了相同版本的 PostGIS,在本地服务器上运行它应该可以解决问题:

ALTER SERVER your_foreign_server_name OPTIONS (ADD extensions 'postgis');
Run Code Online (Sandbox Code Playgroud)

这是Michael Paquier 的一篇相关博客文章