现有PostgreSQL

时间:2018-04-27 07:37:05

标签: json database postgresql jsonb

我们有一个基于PostgreSQL的数据库。实体存储在具有其核心属性的一个表中。有一个分隔的表,其中包含属性的名称和另一个属性值的表。

更具体地说,我们有这样的事情:

usersTable: [id, name, surname] - [1, Johny, Doe]
attrNamesTable: [attrId, attrName] - [1, titleBefore]
attrValuesTable: [attrId, attrValue, userId] - [1, prof, 1]

我需要一个位于此数据库之上的框架,并允许访问记录,就好像它们是文档一样,即:

user: {
    id: 1,
    name: Johny,
    surname: Doe,
    attributes: {
        titleBefore: prof
    }
}

有人对这样的框架有所了解吗?任何建议都可能有所帮助!

1 个答案:

答案 0 :(得分:1)

使用jsonb functions and operators:

select to_jsonb(t) || jsonb_build_object('attributes', json_object_agg("attrName", "attrValue")) as "user"
from "usersTable" t
join "attrValuesTable" a on a."userId" = t."id"
join "attrNamesTable" n using ("attrId")
group by t.id

DbFiddle.

上测试