1 回答

TA貢獻(xiàn)1719條經(jīng)驗(yàn) 獲得超6個(gè)贊
嘗試拆分您的查詢。你會(huì)看到第一部分工作正常:
db.QueryRow("SELECT $1+trunc(random()*$2) as test", 10, 5)
這可能是因?yàn)?1和$2與數(shù)學(xué)運(yùn)算符一起使用(和/或因?yàn)閠runc()和random()兩者都返回?cái)?shù)字),所以 postgres 可以推斷數(shù)據(jù)類型。
所以看起來(lái)是generate_series()參數(shù)沒有被正確確定。Postgres可以根據(jù)參數(shù)推斷數(shù)據(jù)類型,例如
if err := db.QueryRow("SELECT trunc($1,2) as test", 1.4343).Scan(&output); err != nil {panic(err)}
// output = 1.43
但是,如果它是一個(gè)多態(tài)函數(shù),歧義就會(huì)出現(xiàn)并且會(huì)失敗,例如
if err := db.QueryRow("SELECT trunc($1) as test", 1.4343).Scan(&output); err != nil {panic(err)}
// panic: pq: function trunc(unknown) is not unique
為避免歧義,請(qǐng)?jiān)跍?zhǔn)備好的語(yǔ)句中顯式轉(zhuǎn)換參數(shù),例如: generate_series($3::int,$4::int)
- 1 回答
- 0 關(guān)注
- 176 瀏覽
添加回答
舉報(bào)