Node.js用pg模块插PostgreSQL数据时遇$5参数类型错误
解决PostgreSQL插入CURRENT_DATE时的参数类型错误问题
错误原因
你的SQL语句中参数占位符的序号和传入的参数数组顺序不匹配:
- VALUES子句里,
date_limite对应的占位符被写成了$6,但它实际是参数数组的第5个元素(前4个为titre、description、entreprise、lieu),应该用$5。 - 后续的
$7到$11也整体偏移了一位,导致PostgreSQL找不到$5对应的参数,进而抛出"could not determine data type of parameter $5"错误。
修正方案
直接调整SQL中的占位符序号,让其与参数数组的顺序完全对应:
app.post('/', async (req, res) => { try { const { titre, description, entreprise, lieu, date_limite, type_contrat, salaire, experience, diplome_requis, competences } = req.body; const newPost = await db.query('INSERT INTO public.offres(titre, description, entreprise, lieu, date_publication, date_limite, type_contrat, salaire, experience, diplome_requis, competences, created_at, updated_at) VALUES ($1, $2, $3, $4, CURRENT_DATE, $5, $6, $7, $8, $9, $10, NOW(), NOW())', [ titre, description, entreprise, lieu, date_limite, type_contrat, salaire, experience, diplome_requis, competences, ]); res.json(newPost.rows[0]); } catch (err) { console.log(err); res.status(500).send('internal server error'); } });
额外说明
- 使用
CURRENT_DATE的方式完全正确,它会返回PostgreSQL服务器的当前日期,类型与DATE列完美匹配,无需额外转换。 - 你也可以选择在参数数组中传入
new Date(),让pg模块自动转换为DATE类型,但直接使用数据库内置函数更高效,还能避免客户端与服务器时间不一致的问题。
内容的提问来源于stack exchange,提问作者SaintK
相关产品推荐
相关产品推荐

