在go中参数化sql查询

时间:2015-04-14 04:55:59

标签: sql postgresql go

我有一个简单的查询,如下所示。

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来添加其他查询,但我们仍然需要在需要时转义参数。有没有其他解决方案能够以干净的方式完成这项工作?

1 个答案:

答案 0 :(得分:2)

这是一个棘手的解决方案,希望这可以帮到你。此查询示例使用github.com/lib/pq

的语法查询
challan