我有以下查询,与postgres 9.5一起使用:
INSERT INTO knowledge_state
(SELECT learnerid learner_id, lo_id FROM qb_lo_tag WHERE qb_id = NEW.qb_id)
ON CONFLICT DO NOTHING ;
Run Code Online (Sandbox Code Playgroud)
不幸的是,我不能在某些服务器上使用postgres 9.5,我需要将其转换为9.5之前的友好查询。我建立了以下查询,但对我来说似乎复杂得多,我认为可能有更简单的方法。
FOR rows IN SELECT lo_id FROM knowledge_state
WHERE learner_id = learnerid
AND lo_id IN (SELECT lo_id FROM qb_lo_tags WHERE qb_id = New.qb_id) LOOP
INSERT INTO knowledge_state (lo_id, learner_id) SELECT rows.lo_id, learnerid
WHERE NOT EXISTS (SELECT * FROM knowledge_state WHERE lo_id = rows.lo_id AND learner_id = learnerid);
END LOOP;
Run Code Online (Sandbox Code Playgroud)
我很想听听有关如何简化此查询的想法。
我正在尝试使用 node.js 将 json 对象插入到 postgres 数据库中名为 json 类型的数据的列中。
我从客户端(主干)收到的数据采用以下格式:
{id: someid, questions: [{some question data}, {some more question data}]}
Run Code Online (Sandbox Code Playgroud)
如果我插入整个数据(req.body),它工作正常。故事结局。
但是,就我而言,我只想插入问题数组(req.body.questions)。
但这是行不通的。当我解析 req.body.questions 时,我得到 false 返回(不是 json)。
但是,如果我手动将获得的数据插入到 postgres 中,它就会起作用。这是供参考的数据示例:
[ { completed: true,
score: 1,
answerList: [ '1' ],
choicesNumber: 4,
QuestionId: 6,
startTime: '2016-01-19T22:09:47.090Z',
clickNb: 1,
endTime: '2016-01-19T22:09:51.491Z' },
{ completed: true,
score: 1,
answerList: [ '1' ],
choicesNumber: 4,
QuestionId: 5,
startTime: '2016-01-19T22:09:52.209Z',
clickNb: 1,
endTime: '2016-01-19T22:09:53.713Z' }
]
Run Code Online (Sandbox Code Playgroud)
这是我收到的错误:
插入体验时出错 { [错误:json 类型的输入语法无效] 名称:'错误',长度:195,严重性:'错误',代码:'22P02',...
详细信息:'预期为“:”,但找到了“,”。', …