You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go中MySQL转PostgreSQL的INSERT时间戳语句报错排查

解决PostgreSQL INSERT语句中INTERVAL占位符的语法错误

你遇到的语法错误是因为PostgreSQL不支持INTERVAL $3 DAY这种写法——占位符不能直接嵌入在INTERVAL关键字和时间单位之间。以下是两种可行的修正方案:

方案1:字符串拼接转INTERVAL类型

将日期计算部分改为字符串拼接后强制转换为INTERVAL类型,修正后的完整语句:

insrt := `INSERT INTO snippets (title, content, created, expires) VALUES ($1, $2, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP + ($3 || ' DAY')::INTERVAL)`

原理:先把占位符$3和时间单位字符串' DAY'拼接成完整的时间间隔描述,再通过::INTERVAL转换为PostgreSQL能识别的INTERVAL类型。

方案2:使用make_interval函数(推荐)

PostgreSQL内置的make_interval函数可以直接接收数值参数生成时间间隔,避免字符串拼接,语法更严谨:

insrt := `INSERT INTO snippets (title, content, created, expires) VALUES ($1, $2, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP + make_interval(days => $3))`

原理:make_interval(days => $3)会根据传入的$3数值直接生成对应天数的时间间隔对象,和原MySQL的DATE_ADD(UTC_TIMESTAMP(), INTERVAL ? DAY)行为完全匹配。

额外说明

若需要和原MySQL语句中的UTC_TIMESTAMP()严格一致(生成UTC时区的时间),可以把CURRENT_TIMESTAMP替换为CURRENT_TIMESTAMP AT TIME ZONE 'UTC',确保时间不带时区偏移。

内容的提问来源于stack exchange,提问作者uganerd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 03:04:54