gpt4 book ai didi

从 Redshift 表中选择时使用 Postgres 数组转到应用程序

转载 作者:IT王子 更新时间:2023-10-29 01:34:46 26 4
gpt4 key购买 nike

我在网上看到过很多在从表中选择值时使用数组的示例。这是我针对 Redshift 运行的查询。从 colID = ANY(array[1]) 的表中选择 *当我使用 SQL Workbench 运行此查询时,它运行良好。

我正在尝试使用 https://github.com/lib/pq 在我的 Go 应用程序中运行相同的查询

db, err := sql.Open("postgres", url)
defer db.Close()

rows, err := db.Query(`select * from table where colID = ANY($1)`, pq.Array([]int{1}))
if nil != err {
pqErr := err.(*pq.Error)
fmt.Println(pqErr.Error())
}

以上代码预计会根据 https://godoc.org/github.com/lib/pq#Array 工作.

但是输出是错误的。

-----------------------------------------------
error: Assert
code: 1000
context: IsA((Node*)arrayExpr->args->tail->data.ptr_value, Const) -
query: 9574375
location: xen_execute.cpp:6200
process: padbmaster [pid=14680]
-----------------------------------------------

因为错误和行是nil

但是下面的代码有效

rows, err := db.Query(`select * from table where colID = ANY(array[1])`)

任何人都可以解释为什么我收到错误吗?

最佳答案

上面的内容应该与 Postgres 一起使用,但 Redshift 不同,它没有数组数据类型。 Redshift 支持任何条件,但以不同的方式,条件的参数应该是一组行,而不是数组:

select true where 1=any(select 1 union select 2 union select 3);

将返回 true,并且

select true where 4=any(select 1 union select 2 union select 3);

什么也不会返回。

一组行可以是像上面那样的硬编码联合,或者是子查询的结果,但不是逗号分隔的列表或数组。

关于从 Redshift 表中选择时使用 Postgres 数组转到应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50174472/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com