作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在做这样的查询:
SELECT * FROM (
(SELECT * from A WHERE first_name % 'fakeFirstName')
UNION
(SELECT * from B WHERE last_name % 'fakeLastName')
) AS result;
A 和 B 都是同一个基础表 C 的 View ,具有完全相同的列。
然而 %
运算符使用 GUC 参数 pg_trgm.similarity_threshold
计算first_name % 'fakeFirstName'
和 last_name % 'fakeLastName'
,我的目标是在每个子查询之前更改此参数,因为这两列的相似度阈值不同。
要更改 pg_trgm.similarity_threshold
参数,例如值 0.2,我有两个选择:
SET pg_trgm.similarity_threshold = 0.2;
SELECT set_limit(0.2);
我非常关心执行速度,这意味着我更愿意使用 %
使用 GIN 索引而不是 <->
操作具有 GIST 索引的运算符。
我尝试做类似下面的事情,但由于函数 set_limit()
而没有成功。在使用 %
之前未被调用运算符(operator):
SELECT * FROM (
(SELECT *, set_limit(0.2) from A WHERE first_name % 'fakeFirstName')
UNION
(SELECT *, set_limit(0.6) from B WHERE last_name % 'fakeLastName')
) AS result;
非常感谢任何帮助。
最佳答案
我不确定,如果我理解正确的话,但你可以尝试使用 set_limit()
加入 A 和 B 来对抗 CTE,例如:
t=# with a as (select set_limit(0.21))
, b as (select set_limit(0.22))
select show_limit(), 'a' from pg_database where datname = 't'
union
select show_limit(), 'b' from pg_database join a on true where datname = 't'
union
select show_limit(), 'c' from pg_database join b on true where datname = 't'
t-# order by 2;
show_limit | ?column?
------------+----------
0.2 | a
0.21 | b
0.22 | c
(3 rows)
另外请注意,您不要将其改回原来的值,因此该值仍然是最后一次调用的 set_limit()
关于sql - 在子查询 PostgreSQL 之前更改 GUC 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49941564/
我目前正在做这样的查询: SELECT * FROM ( (SELECT * from A WHERE first_name % 'fakeFirstName') UNION
我是一名优秀的程序员,十分优秀!