首页 > 解决方案 > Postgresql 中有没有办法查询列中的整个 JSONB 记录?

问题描述

我正在将 Postgresql 13 / express.js 与 node-postgres 一起用于测试项目。我在 Postgresql 中有一个表,其中包含一个列,其中包含评估表的一系列问题(我将其设置为 JSON,因为可以编辑问题以包含更多或更少的问题,动态表单内容)。

有了这个想法,我做了两张桌子:EvalFormDefaultForm

EvalFormid (PK, INT), job_id, form_type (INT), form_questions (JSONB), and form_answers (JSONB)

DefaultFormid (PK, INT) and form_questions(JSONB)

逻辑是该form_type值将对应于form_questions将根据其复制的内容id。(例如form_type= 1,那么它将idDefaultForm表中复制 = 1 的 form_questions)。

我希望能够复制整个 JSONB 数组并将其插入到另一个表中。我已经阅读了jsonb_build_objectand jsonb_agg(),但我不确定如何将它们用于我的用例。

预先感谢您的帮助!

这是我目前正在处理的查询,仅缺少关于如何获取 JSONB,因为我无法将类型记录转换为 JSONB。

const type = await pool.query('SELECT job_type FROM jobs WHERE id = $1', [
  req.params.id
]);

 const sqlString = 'WITH questions AS (
 SELECT form_questions
FROM DefaultForm WHERE id = $2
 INSERT INTO EvalForm (
job_id, form_type, form_questions)
  SELECT $1, $2, questions::jsonb
FROM questions';

 const sqlValues = [req.params.id, type.rows[0].job_type
 ];

标签: postgresql

解决方案


jsonb_agg是正确的选择,您正在寻找

INSERT INTO EvalForm (job_id, form_type, form_questions)
SELECT $1, $2, jsonb_agg(form_questions)
FROM DefaultForm
WHERE id = $2;

推荐阅读