我想刪除 Postgres 數據庫中早于 X 分鐘的所有數據庫條目。我在go中準備好的聲明看起來像這樣:deletefrom my_tablewhere expires < (to_timestamp($1) - '$2 minutes'::interval);如何正確傳遞第二個參數?$2PS:我知道有不同的語句可以解決這個問題,但我對如何傳遞引用的參數非常感興趣。
4 回答

鳳凰求蠱
TA貢獻1825條經驗 獲得超4個贊
無法將參數內插到字符串文本中。
對于您的情況,一個可能的解決方案是將一個帶有間隔的數字相乘:
where expires < (to_timestamp($1) - $2 * '1 minute'::interval)

慕的地8271018
TA貢獻1796條經驗 獲得超4個贊
您可以使用make_interval
delete from my_table
where expires < (to_timestamp($1) - make_interval(mins => $2));

慕村225694
TA貢獻1880條經驗 獲得超4個贊
您還可以改為參數化整個間隔字符串。這消除了對中間鑄造和連接的需求。text
query := `
delete from my_table
where expires < (to_timestamp($1) - $2::interval);
`
interval := fmt.Sprintf("%d minutes", mins)
db.Exec(query, timestamp, interval)
- 4 回答
- 0 關注
- 100 瀏覽
添加回答
舉報
0/150
提交
取消