我有一个简单的查询,如下所示。
select json_agg(row_to_json(t)) from (select *
from jobs, companies, locations
where jobs.company_id = companies.id and jobs.location_id = locations.id
$extra
and to_tsvector(jobs.name || ' ' || companies.name || ' ' || locations.name) @@ to_tsquery($1)
and to_tsvector(locations.name) @@ to_tsquery($2)
limit $3) t
但它有一些关于其他查询的问题。根据查询用户请求,$1
和$2
参数是可选的。但是,至少在这种情况下to_tsquery
(postgresql)并不支持任何"匹配所有"查询如' *'所以我们必须使用适当的参数来获得整个附加查询and to_tsvector(locations.name) @@ to_tsquery($2)
,或者根本不需要。
这使得构建查询基于参数繁琐的工作,因为我们必须一直复制相同的查询并添加其他查询,并且它很容易累加。我有一个解决方案,使用strings.Replace
来添加其他查询,但我们仍然需要在需要时转义参数。有没有其他解决方案能够以干净的方式完成这项工作?
答案 0 :(得分:2)
这是一个棘手的解决方案,希望这可以帮到你。此查询示例使用github.com/lib/pq
的语法查询challan