【问题标题】:postgreSQL error: "constraint does not exist" (but it does exist...)postgreSQL 错误:“约束不存在”(但它确实存在......)
【发布时间】:2019-08-24 23:45:22
【问题描述】:

我有一个正在尝试更新的数据库,但我无法弄清楚为什么我会收到这个关于列不存在的奇怪错误。当我使用“heroku pg:psql”访问数据库时,我完全可以看到该列。我找到了 couple 其他 questions 有类似问题,但一直无法解决。

这是我执行 INSERT...ON CONFLICT WITH CONSTRAINT 的代码...有什么想法吗?

const text = 'INSERT INTO "test2" '
+'(route_id, secupdated, retrievedate, traintimeday) '
+'VALUES($1, $2, $3, $4) '
+'ON CONFLICT ON CONSTRAINT traintimeday '
+'DO UPDATE SET (secupdated, secarrival) = (excluded.secupdated, excluded.secarrival) '
+'RETURNING *' ; 
const values = [train_id 
, Math.round(dateNow.getTime()/1000)
, Math.round(dateNow.getDate())
, Math.round(dateNow.getDate()) + stu.stop_id
]; 
pool.query(text, values, (err, res) => {
if (err) {
throw err;
}
console.log('user:', res.rows[0])
})

错误消息说'约束 traintimeday 不存在'

【问题讨论】:

    标签: javascript postgresql node-postgres


    【解决方案1】:

    如果traintimeday 不是约束,而不是:

    +'ON CONFLICT ON CONSTRAINT traintimeday '
    

    使用:

    +'ON CONFLICT (traintimeday) '
    

    【讨论】:

    • 嗯,然后我收到一条错误消息“没有与 ON CONFLICT 规范匹配的唯一或排除约束”
    • @garson 我不知道你的数据模型,但假设route_id 是主键,你可能想使用ON CONFLICT (route_id)。本文解释了如何使用 ON CONFLICT:postgresqltutorial.com/postgresql-upsert
    • 帮助了 - 谢谢!我需要将约束定义为唯一标识符。
    猜你喜欢
    • 2017-05-26
    • 2011-05-14
    • 2019-05-22
    • 1970-01-01
    • 2023-03-03
    • 2018-08-02
    • 2018-11-18
    相关资源
    最近更新 更多