Javascript 请问我在Node和Express JS中的PostgreSQL查询有什么问题
我想使用CTE通过一个查询向Postgres中的两个表添加数据。在用户从前端的表单提交数据后,我希望我的SQL查询在表1中自动插入id。然后,表1中的相同id将用于在同一事务中创建表2的数据。我有下面的代码,但是当我通过在Postman中提交值来运行它时,我得到了下面的错误,这表明返回的pid没有在第二个查询中使用Javascript 请问我在Node和Express JS中的PostgreSQL查询有什么问题,javascript,node.js,postgresql,Javascript,Node.js,Postgresql,我想使用CTE通过一个查询向Postgres中的两个表添加数据。在用户从前端的表单提交数据后,我希望我的SQL查询在表1中自动插入id。然后,表1中的相同id将用于在同一事务中创建表2的数据。我有下面的代码,但是当我通过在Postman中提交值来运行它时,我得到了下面的错误,这表明返回的pid没有在第二个查询中使用 Error in transaction error: null value in column "pid" violates not-null constraint 请参见下面的
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()
})
})
})
})
}
假设
rows
实际上是一个数组,那么肯定res.rows[0]。pid
就是您想要的吗?我不确定您使用的是什么库(您能确认吗?),但在我看来,您多次点击数据库…我指的是您用于执行数据库查询的库?DB
不是本机构造,因此它将来自一个库,您用于PostgreSQL连接的节点库是哪个?“是吗?”詹姆斯,我想这是阵列的错误。它现在正在工作,但是username列返回空值,即使数据已经在数据库中注册,请求也会继续以邮递员的方式发送。是的,它是pg库。