这似乎是一个非常基本的问题,但是如何更改 pg_trgm 扩展的默认限制?目前是 0.3。我已经做好了:
select set_limit(0.5)
select show_limit() => 0.5
关闭连接,重新连接:
select show_limit() => 0.3
谢谢你的帮助。
这似乎是一个非常基本的问题,但是如何更改 pg_trgm 扩展的默认限制?目前是 0.3。我已经做好了:
select set_limit(0.5)
select show_limit() => 0.5
关闭连接,重新连接:
select show_limit() => 0.3
谢谢你的帮助。
由于 Postgres 9.6pg_trgm
使用了大统一配置 (GUC) 系统,因此可以在集群级别添加默认值,或pg_trgm.similarity_threshold = 0.5
在postgresql.conf
数据库级别 ( alter database myDB set pg_trgm.similarity_threshold = 0.5
) 或 GUC 允许的所有其他级别(每个用户,每个功能ETC)
这可能不是一个解决方案,而是对潜在解决方案的贡献......
(我假设您希望所有到数据库的连接都使用 pg_trgm 参数,而不仅仅是交互式连接?)
似乎默认的 0.3 限制在函数中被硬编码:
trgm_op.c:
PG_MODULE_MAGIC;
float4 trgm_limit = 0.3f;
我不确定它是否可以通过任何配置文件进行控制,因此一种选择可能是更改源文件中的默认值,然后重新构建扩展。
在查找如何在 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