javascript - 请问我在 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()
})
})
})
})
}
解决方案
推荐阅读
- xcode - 缺少 WatchApp 架构 - Xcode 12
- php - 如果用户未登录,则重定向到登录页面 - PHP
- javascript - 如何让这个 JavaScript 汉堡菜单工作?
- python - 在 Streamlit 中放置 sqlite3 db 文件的问题
- c++ - 为什么每个解决方案的渐近时间和实际时间都存在异常?
- php - 带有 Imagick 的 PNG 到 DDS 缺少设置参数
- node.js - NestJS 处理 MongoError
- html - 与 :has() 在 jQuery 中以具有嵌套表的父表为目标的相反是什么
- rust - 为什么在使用 Self 作为类型参数时需要 Sized?
- r - 在标签间隔中用符号切割变量