You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用node-postgresql向ElephantSQL插入数据时subjects表报错求助

问题:向ElephantSQL的subjects表插入数据时出现字段引用错误?

我正在使用node-postgresql创建表并向ElephantSQL写入数据,已成功创建表并通过JSON文件为其中一张表导入数据,但在操作第二张表时出现错误。

创建表及关联的代码如下:

await pool.query("CREATE TABLE questions (id INT PRIMARY KEY GENERATED ALWAYS AS IDENTITY, question text NOT NULL, answer text NOT NULL)")

await pool.query("CREATE TABLE subjects ( id INT PRIMARY KEY GENERATED ALWAYS AS IDENTITY, question_id INT REFERENCES questions(id), subject TEXT NOT NULL)")

随后我通过JSON文件填充数据,代码如下:

return await pool.query("INSERT INTO questions (question, answer) (SELECT question, answer FROM json_populate_recordset(NULL::questions, $1::JSON));", [JSON.stringify(questions)])
return await pool.query("INSERT INTO subjects (question_id, subject) (SELECT  question_id, subject FROM json_populate_recordset(NULL::questions, $1::JSON));", [JSON.stringify(subject)])

我成功向questions表插入数据,但向subjects表插入时出现以下错误:

There is a column named "question_id" in table "subjects", but it cannot be referenced from this part of the query.


问题原因及解决方案

错误的核心是你插入subjects表的SQL语句中,用了NULL::questions来定义JSON数据对应的表结构,但questions表的字段是id、question、answer,根本没有question_id和subject这两个字段。PostgreSQL无法从questions类型的结构里解析出你要的字段,因此抛出错误。

你需要把NULL::questions替换为NULL::subjects,让JSON数据匹配subjects表的结构,这样PostgreSQL才能正确识别并提取question_id和subject字段。

修正后的插入代码:

return await pool.query("INSERT INTO subjects (question_id, subject) (SELECT  question_id, subject FROM json_populate_recordset(NULL::subjects, $1::JSON));", [JSON.stringify(subject)])

另外请确认你的subject JSON数据中,确实包含question_id和subject这两个字段,且字段名与SQL中的完全一致(PostgreSQL字段名大小写敏感)。


内容的提问来源于stack exchange,提问作者tariba

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 11:10:40