首页 > 解决方案 > 请问我在 Node 和 Express JS 中的 PostgreSQL 查询有什么问题

问题描述

我想通过一个使用 CTE 的查询将数据添加到 Postgres 中的两个表中。在用户从前端的表单提交数据后,我希望我的 SQL 查询在 table1 中自动插入 id。然后在同一个事务中使用表一中相同的id来创建表2的数据。我有下面的代码,但是当我通过在 Postman 中提交值来运行它时,我得到了下面的错误,表明返回的 pid 没有在第二个查询中使用。

Error in transaction error: null value in column "pid" violates not-null constraint

请参阅下面的代码:

exports.addPost = (req, res) => {
  db.query('BEGIN', err => {
      if (shouldAbort(err)) return
      const queryPost = 'INSERT INTO table1 (post_type, created_on) VALUES($1, $2) RETURNING pid'
      db.query(queryPost, ['keyword', 'now()'], (err, res) => {
        if (shouldAbort(err)) return
        const data = {
        author: req.body.username,
        title: req.body.title,
        description: req.body.description,
        body: req.body.body,
        category: req.body.category,
        search_volume: req.body.search_volume,
        is_deleted: req.body.is_deleted
      }
      const insertKeywordText = `INSERT INTO table2 (pid, author, title, description, body, category, search_volume, is_deleted, created_on) 
                                   VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)`
    const insertKeywordValues = [res.rows.pid, data.username, data.title, data.description, data.body, data.category, data.search_volume, data.is_deleted, 'now()']

        db.query(insertKeywordText, insertKeywordValues, (err, res) => {
          if (shouldAbort(err)) return
          db.query('COMMIT', err => {
            if (err) {
              console.error('Error committing transaction', err.stack)
            }
            done()
          })
        })
      })
    })
  }

标签: javascriptnode.jspostgresql

解决方案


推荐阅读