为什么 Postgres 谈论第 0 列;这是什么意思?

在尝试向主题表添加新主题时,Postgres 认为我想向第 0、1 和 3 列添加一些内容。为什么?


我正在使用 Postman 发布一个新用户。在用户路由中,我将用户对象插入到用户表中。这样可行。


我的第二步是subjects如果该主题尚不存在,则将该主题插入表格中。


这就是问题所在。


此方法应在subjects表中插入一个新主题并返回新行:


    insertSubject(knex, newSubject) {

        return knex

            .insert(newSubject)

            .into('subjects')

            .returning('*')

            .then(rows => {

                console.log(rows)

                return rows[0]

            })

    },

我没有这样做,而是在邮递员中收到了这条消息:


{

    "message": "insert into \"subjects\" (\"0\", \"1\", \"2\") values ($1, $2, $3) returning * - column \"0\" of relation \"subjects\" does not exist",

    "error": {

        "length": 122,

        "name": "error",

        "severity": "ERROR",

        "code": "42703",

        "position": "25",

        "file": "parse_target.c",

        "line": "1034",

        "routine": "checkInsertTargets"

    }

作为参考,这就是我调用上述方法的方式:


    .post(jsonParser, (req, res, next) => {

        const { first_name, last_name, email, user_password, gender, tutor, student, fee, in_person, online_medium, subjects } = req.body;

        const userFields = { first_name, last_name, email, user_password, gender, tutor, student, fee, in_person, online_medium, subjects };

        const newUser = { first_name, last_name, email, user_password, gender, tutor, student, fee, in_person, online_medium };


        for (const [key, value] of Object.entries(userFields)) {

            if (value === null) {

                return res.status(400).json({

                    error: { message: `Missing ${key} in request body` }

                })

            }

        }


        const user = []

        UsersService.insertUser(

            req.app.get('db'),

            newUser

        )

        .then(res => {

            user.push(res)

            return SubjectsService.getBySubject(

                req.app.get('db'),

                subjects

            )

        })

米脂
浏览 73回答 2
2回答

慕尼黑的夜晚无繁华

错误:"insert into \"subjects\" (\"0\", \"1\", \"2\") values ($1, $2, $3) returning * - column \"0\" of relation \"subjects\" does not exist"原因是您告诉 Postgres 该表包含您想要INSERT values ($1, $2, $3)放入的列“0”、“1”和“2”。该错误告诉您表中不存在这些列。实际上它停在“0”列,因为再往前走是没有意义的。最好的猜测是您正在将您分配给INSERT列列表的值。

繁华开满天机

正如@AdrianKlaver 在评论中指出的那样,我需要更改插入代码。我这样更新它:    insertSubject(knex, newSubject) {        return knex('subjects')            .insert({subject_name: newSubject})            .returning('*')            .then(rows => {                console.log(rows)                return rows[0]            })    },它有效!
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript