2

是否可以使用 SQL FUNCTION 中的 arg 来设置配置值?

我正在尝试做这样的事情,但它不适用于 PostgreSQL 10.12(配置的值必须是数字,而不是 arg):

CREATE OR REPLACE FUNCTION test(query text, threshold real)
RETURNS TABLE(
    t text,
    score real
  )
AS
'SELECT t, word_similarity(query, t) as score
 FROM test_trgm
 WHERE query <% t 
 ORDER BY score DESC'
language 'sql'
SET pg_trgm.word_similarity_threshold TO threshold;

这样做的目的是提高函数的性能,而不是使用类似的东西:

WHERE query <% t AND word_similarity(query, t) > threshold

提前致谢!

4

1 回答 1

2

您可以SET_CONFIG()在函数内使用

CREATE OR REPLACE FUNCTION testsim(query text, threshold real)
RETURNS TABLE(
    t text,
    score real
  )
AS
$$

select set_config('pg_trgm.word_similarity_threshold', threshold::text, true);

SELECT t, word_similarity(query, t) as score
 FROM test_trgm
 WHERE query <% t 
 ORDER BY score DESC
 $$
language 'sql'
;
于 2020-05-18T12:51:32.140 回答