设置pg_trgm的默认限制

时间:2013-01-30 15:50:33

标签: postgresql full-text-search

这似乎是一个非常基本的问题,但如何更改pg_trgm扩展名的默认限制?目前是0.3。我做了:

select set_limit(0.5)
select show_limit() => 0.5

关闭连接,重新连接:

select show_limit() => 0.3

感谢您的帮助。

3 个答案:

答案 0 :(得分:4)

这可能不是解决方案,而是对潜在解决方案的贡献......

(我假设您希望pg_trgm参数用于与DB的所有连接,而不仅仅是交互式连接?)

似乎默认的0.3限制是在函数中硬编码的:

trgm_op.c:

    PG_MODULE_MAGIC;

float4          trgm_limit = 0.3f;

我不确定它是否可以通过任何配置文件进行控制,因此一个选项可能是更改源文件中的默认值,并重新构建扩展。

答案 1 :(得分:2)

在Ruby on Rails环境中查找如何执行此操作时偶然发现了这一点。结束猴子修补我的适配器:

require 'active_record/connection_adapters/postgresql_adapter'

class ActiveRecord::ConnectionAdapters::PostgreSQLAdapter
private
  alias_method :default_configure_connection, :configure_connection

  # Monkey patch configure_connection because set_limit() must be called on a per-connection basis.
  def configure_connection
    default_configure_connection
    begin
        execute("SELECT set_limit(0.1);")
    rescue ActiveRecord::StatementInvalid
        Rails.logger.warn("pg_trgm extension not enabled yet")
    end
  end
end

在看到其他人遇到此问题后,请执行此路线,例如https://github.com/textacular/textacular/issues/39

答案 2 :(得分:2)

自Postgres 9.6起,pg_trgm使用了Grand Unified Configuration(GUC)系统,因此可以在群集级别上在pg_trgm.similarity_threshold = 0.5中添加postgresql.conf或在{数据库级别(alter database myDB set pg_trgm.similarity_threshold = 0.5)或GUC允许的所有其他级别(按用户,按功能等)