使用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
相关产品推荐
相关产品推荐

