我嘗試做一個查詢,像這樣佔位符的Postgres的查詢generate_series返回未知
database.Query("select login,displayname from (select distinct $1+trunc(random()*$2)::integer as id from generate_series($3,$4) g) r join users using(id) limit 10",min_id,max_id-min_id,min_id,max_id)
佔位符,則拋出我的錯誤:
pq: function generate_series(unknown, unknown) is not unique
然後我找到一個解決方案來格式化查詢作爲字符串
query:=fmt.Sprintf("select login,displayname from (select distinct %v+trunc(random()*%v)::integer as id from generate_series(%v,%v) g) r join users using(id) limit 10",min_id,max_id-min_id,min_id,max_id)
它的工作原理。
我想使它以正確的方式工作,但我不明白爲什麼它沒有。
更新時間:
var min_id int64
var max_id int64
err:=_database.QueryRow("select min(id),max(id) from users").Scan(&min_id, &max_id)
if err!=nil {
log.Panicf("Failed to get min and max %v",err.Error())
return
}
var rows *sql.Rows
query:=fmt.Sprintf("select login,displayname from (select distinct %v+trunc(random()*%v)::integer as id from generate_series(%v,%v) g) r join users using(id) limit 10",min_id,max_id-min_id,min_id,max_id)
log.Printf(query)
rows,err=_database.Query("select login,displayname from (select distinct $1+trunc(random()*$2)::integer as id from generate_series($3,$4) g) r join users using(id) limit 10",min_id,max_id-min_id,min_id,max_id)
if err!=nil {
log.Panicf("failed to get random entries: %v",err)
}
什麼類型max_id和min_id? – kostya
它們是整數,它們是有效的 – ekiyanov
在Go中有許多整數類型:int,uint,int64等。我瘋狂的猜測是postgresql驅動程序不支持所有這些類型。嘗試使用int64。 – kostya