PostgreSQL执行DELETE时报HOUR附近语法错误 如何保留最近1小时数据
问题原因
报错是因为SQL中的时间间隔写法不符合PostgreSQL语法规范:PostgreSQL要求INTERVAL后面的时间单位参数需要用单引号包裹,同时不需要额外用括号把NOW()和时间间隔运算逻辑包在一起。
修复后的正确SQL
DELETE FROM common.orders WHERE created_at < NOW() - INTERVAL '1 HOUR';
你也可以使用类型转换的写法,效果完全一致:
DELETE FROM common.orders WHERE created_at < NOW() - '1 HOUR'::INTERVAL;
注意事项
- 执行删除操作前,建议先运行查询语句验证待删除数据的范围是否符合预期,避免误删有效数据:
SELECT * FROM common.orders WHERE created_at < NOW() - INTERVAL '1 HOUR'; - 如果业务有指定时区要求,可以将
NOW()替换为CURRENT_TIMESTAMP AT TIME ZONE '目标时区',保证时间计算和业务时区匹配 - 若表数据量较大,建议分批次执行删除操作,避免长时间锁表影响正常业务读写
内容的提问来源于stack exchange,提问作者user1285928
相关产品推荐
相关产品推荐

