在准备好的语句中查找 Postgres 查询,Golang
IN Lookup Postgres query in prepared statement, Golang
用例需要 运行 次排除查询。
类似于:
select col1
from awesome_table
where col2 not in (a,b,c,d)
and col3 not in (a1,a2,a3,a4);
由于排除的 col1 值和排除的 col2 值的集合大小可变,生成预准备语句的好方法是什么?
我能想到的一个 hack 是定义集合的上限,比如 15,如果用户输入的查询集大小的数量小于最大值,则用重复值填充所有占位符,有没有更好的方法?根据社区的理念,准备好的陈述应该如何处理这个问题?
你能从 Go 传递 (Postgres) 数组吗?
然后你可以将语句重写为
where col2 <> ALL ()
and col3 <> all ()
其中 </code> 和 <code>
是包含值的 (Postgres) 数组。
如果您不能传递正确的数组实例,您可以将值作为格式化的字符串传递,以便它可以转换为数组。
select col1
from awesome_table
where col2 <> ALL ( (cast as int[]) )
and col3 <> ALL ( (cast as text[]) );
然后你可以传递 '{1,2,3}'
作为第一个参数,例如'{"foo", "bar"}'
作为第二个参数。您需要将数组类型调整为列的实际数据类型
添加到@a_horse_with_no_name的回答中,
在 Golang 中,psql 驱动程序 github.com/lib/pq
包含一个方法 Array()
,可用于将 Golang 切片转换为 psql 数组。
...
import (
"github.com/lib/pq"
)
...
select col1
from awesome_table
where col2 <> ALL ()
and col3 <> ALL ();
其中
slice1 := []string{val1, val2}
slice2 := []string{val3, val4}
pq.Array(slice1)
可以为 </code> 传递,<code>pq.Array(slice2)
可以为 </code> 占位符传递,同时传递预准备语句中的值。</p>
<p>有关 <code>ANY
和 ALL
函数的更多信息,请访问 here
用例需要 运行 次排除查询。 类似于:
select col1
from awesome_table
where col2 not in (a,b,c,d)
and col3 not in (a1,a2,a3,a4);
由于排除的 col1 值和排除的 col2 值的集合大小可变,生成预准备语句的好方法是什么? 我能想到的一个 hack 是定义集合的上限,比如 15,如果用户输入的查询集大小的数量小于最大值,则用重复值填充所有占位符,有没有更好的方法?根据社区的理念,准备好的陈述应该如何处理这个问题?
你能从 Go 传递 (Postgres) 数组吗?
然后你可以将语句重写为
where col2 <> ALL ()
and col3 <> all ()
其中 </code> 和 <code>
是包含值的 (Postgres) 数组。
如果您不能传递正确的数组实例,您可以将值作为格式化的字符串传递,以便它可以转换为数组。
select col1
from awesome_table
where col2 <> ALL ( (cast as int[]) )
and col3 <> ALL ( (cast as text[]) );
然后你可以传递 '{1,2,3}'
作为第一个参数,例如'{"foo", "bar"}'
作为第二个参数。您需要将数组类型调整为列的实际数据类型
添加到@a_horse_with_no_name的回答中,
在 Golang 中,psql 驱动程序 github.com/lib/pq
包含一个方法 Array()
,可用于将 Golang 切片转换为 psql 数组。
...
import (
"github.com/lib/pq"
)
...
select col1
from awesome_table
where col2 <> ALL ()
and col3 <> ALL ();
其中
slice1 := []string{val1, val2}
slice2 := []string{val3, val4}
pq.Array(slice1)
可以为 </code> 传递,<code>pq.Array(slice2)
可以为 </code> 占位符传递,同时传递预准备语句中的值。</p>
<p>有关 <code>ANY
和 ALL
函数的更多信息,请访问 here