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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 13:25:11