我需要在表中创建类似字符串的排名.
我有下表
create table names (
name character varying(255)
);
Run Code Online (Sandbox Code Playgroud)
目前,我正在使用提供该功能的pg_trgm模块similarity,但我遇到了效率问题.我创建了一个像Postgres手册建议的索引:
CREATE INDEX trgm_idx ON names USING gist (name gist_trgm_ops);
Run Code Online (Sandbox Code Playgroud)
我正在执行以下查询:
select (similarity(n1.name, n2.name)) as sim, n1.name, n2.name
from names n1, names n2
where n1.name != n2.name and similarity(n1.name, n2.name) > .8
order by sim desc;
Run Code Online (Sandbox Code Playgroud)
查询有效,但是当你有数百个名字时,它确实很慢.此外,也许我忘了一点SQL,但我不明白为什么我不能使用条件and sim > .8没有得到"列sim不存在"错误.
我想要任何提示使查询更快.
多次pq: sorry, too many clients already调用时出现错误GetMessages()。
请找到更新的代码:
main() 代码
func main() {
dbConn, err := InitDB()
if err != nil {
Log.Error("Connection Error: ", err.Error())
return
}
defer dbConn.Close()
go run()
var input string
fmt.Scanln(&input)
}
Run Code Online (Sandbox Code Playgroud)
数据库连接代码为:
func InitDB()(*sql.DB, error) {
connectionString := fmt.Sprintf("user=%v password='%v' dbname=%v sslmode=disable", USER, PASSWORD, DATABASE)
db, err = sql.Open(DRIVER, connectionString)
return db, err
}
Run Code Online (Sandbox Code Playgroud)
run 协程:
func run() {
for {
messages, err := GetMessages()
if err != nil {
Log.Error("Connection …Run Code Online (Sandbox Code Playgroud) 在另一个问题中,有人询问如何SHOW search_path;使用SELECT查询查询postgresql运行时参数(例如).在答案中,有人建议使用
SELECT * FROM pg_settings WHERE name = 'search_path';
Run Code Online (Sandbox Code Playgroud)
这很好用,但如何在扩展中定义自定义参数呢?(请参阅有关自定义选项的文档 ).
例:
SET abc.my_var = 1;
SHOW abc.my_var;
Run Code Online (Sandbox Code Playgroud)
输出
1
Run Code Online (Sandbox Code Playgroud)
但
SELECT * FROM pg_settings WHERE name = 'abc.my_var';
Run Code Online (Sandbox Code Playgroud)
不返回任何行.是否有其他表/视图我可以使用SELECT语句查询我的自定义参数?
在Microsoft SQL Server中,要在查询窗口中测试类似的内容:
select * from Users where LastName = @lastname
Run Code Online (Sandbox Code Playgroud)
我可以在命令之前添加这个:
declare @lastname varchar(16)
set @lastname = 'Troy'
Run Code Online (Sandbox Code Playgroud)
但是在PostgreSQL中,我找不到类似的方法.似乎我唯一能做的就是直接用它的值替换参数名称.当ad-hoc查询变得复杂并且多次使用相同的参数时,它变得很难.有办法吗?