【问题标题】:Set default limit for pg_trgm设置 pg_trgm 的默认限制
【发布时间】:2023-04-07 06:44:01
【问题描述】:

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

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

关闭连接,重新连接:

select show_limit() => 0.3

感谢您的帮助。

【问题讨论】:

  • 我也遇到了同样的问题,你解决了吗?

标签: postgresql full-text-search


【解决方案1】:

自 Postgres 9.6 以来,pg_trgm 使用了大统一配置 (GUC) 系统,因此可以在集群级别设置默认值,在 postgresql.conf 中添加 pg_trgm.similarity_threshold = 0.5,或在数据库级别 (alter database myDB set pg_trgm.similarity_threshold = 0.5 ) 或 GUC 允许的所有其他级别(每个用户、每个功能等)

【讨论】:

【解决方案2】:

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

(我假设您希望所有到数据库的连接都使用 pg_trgm 参数,而不仅仅是交互式连接?)

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

trgm_op.c:

    PG_MODULE_MAGIC;

float4          trgm_limit = 0.3f;

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

【讨论】:

  • 为什么这被标记为答案?这只是一个提示。
【解决方案3】:

在查找如何在 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

【讨论】:

    猜你喜欢
    • 2018-11-13
    • 1970-01-01
    • 2021-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多