Rails postgis 适配器在表“geometry_columns”中进行了大量查询

Goz*_*zup 5 gis postgis ruby-on-rails rails-postgresql ruby-on-rails-3.2

我想通过 activerecord-postgis-adapter gem 优化当前使用 postgis 的 Rails 3.2.13 应用程序。

问题是,当我在表中进行查询时,即使其中只有常规字段(没有地理/几何/这类东西),此查询之前还有对 postgis“geometry_columns”表的另一个查询。

例子:

(5.6ms)  SELECT * FROM geometry_columns WHERE f_table_name='srlzd_infos'
  SrlzdInfo Load (1.1ms)  SELECT "srlzd_infos".* FROM "srlzd_infos" WHERE "srlzd_infos"."user_id" = 1009 LIMIT 1
Run Code Online (Sandbox Code Playgroud)

但我只在我的用户表/模型中使用 postgis。

有谁知道我怎样才能避免那些不必要的查询?

谢谢你们。

小智 1

我相信这回答了您的问题:https://github.com/rgeo/rgeo/issues/29。从问题来看:

activerecord 适配器发出这些选择来确定数据库的结构。它们并非无用。在上面提到的选择的情况下,精确地确定该表是否包含任何地理空间列(如果是,则它们是哪些列以及它们的配置方式)。如果您使用的是 postgis 适配器,那么您可能还会注意到针对 pg_attribute 的选择,可能还有其他一些选择。它们都是 activerecord 发挥其魔力的一部分。

好消息是,我相信 activerecord 会缓存它在非开发环境中收集的所有结构信息,因此您应该在每个表、每个 Rails 进程中仅看到这些选择一次。它们应该几乎是无害的,即使对于没有空间列的表也是如此。