我想删除 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 关注
- 69 浏览
添加回答
举报
0/150
提交
取消