Хранилище документов поверх существующего PostgreSQL - PullRequest
0 голосов
/ 27 апреля 2018

У нас есть база данных на основе 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 голосов
/ 27 апреля 2018

Использование функций и операторов jsonb:

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.

...