У меня есть запрос, который вставляется в две таблицы одновременно (требуется из-за ограничений внешнего ключа, связывающих их) и хотел бы вернуть результат обеих вставок на одном уровне, но я не уверен, как это будет сделано, илиесли это вообще возможно.
Вставки выглядят так и работают нормально:
with org_b as (
insert into public.base (
id,
organisation_id,
last_modified_by
)
values ('<organisation UUID/>', '<organisation UUID/>', '<user UUID/>')
returning *
), org_eb as (
insert into public.entity_base (
id
)
values ('<organisation UUID/>')
returning *
), org as (
insert into public.organisation_data (
id,
armicus_name
)
values ('<organisation UUID/>', 'Stack Overflow')
returning *
), use_b as (
insert into public.base (
id,
organisation_id,
last_modified_by
)
values ('<user UUID/>', '<organisation UUID/>', '<user UUID/>')
returning *
), use_eb as (
insert into public.entity_base (
id
)
values ('<user UUID/>')
returning *
), use as (
insert into public.user_account_data (
id,
email
)
values ('<user UUID/>', 'stack@overflow.com')
returning *
)
Я хотел бы вернуть что-то вроде этого:
select to_json(
select org_b.id, org_b.organisation_id, org_b.created_date, org_b.last_modified_date, org_b.last_modified_by, org_b.armicus_data, org.armicus_name
from org_b
join org on org_b.id = org.id
) as organisation, to_json(
select use_b.id, use_b.organisation_id, use_b.created_date, use_b.last_modified_date, use_b.last_modified_by, use_b.armicus_data, use.email
from use_b
join use on use_b.id = use.id
) as user
from org_b
Но это вызывает синтаксисошибка, есть ли способ добиться этого?Я также могу загрузить SQL для создания таблиц, если это поможет.
Отредактировано для добавления SQL для создания таблиц и ограничений:
Создать базовую таблицу:
CREATE TABLE base (
id uuid PRIMARY KEY,
organisation_id uuid NOT NULL,
created_date timestamptz NOT NULL DEFAULT now(),
last_modified_date timestamptz NOT NUll,
last_modified_by uuid NOT NULL,
armicus_data jsonb
);
Создание базы данных:
CREATE TABLE entity_base (
id uuid PRIMARY KEY REFERENCES base(id) ON DELETE CASCADE,
template_id uuid
);
Создание данных организации:
CREATE TABLE organisation_data (
id uuid PRIMARY KEY REFERENCES entity_base(id) ON DELETE CASCADE,
armicus_name TEXT
);
Создание данных учетной записи пользователя:
CREATE TABLE user_account_data (
id uuid PRIMARY KEY REFERENCES entity_base(id) ON DELETE CASCADE,
email text NOT NULL
);
Добавление внешнего ключа идентификатора организации:
ALTER TABLE base ADD CONSTRAINT base_organisation_id_fkey FOREIGN KEY (organisation_id) REFERENCES organisation_data(id);
Добавить последнее изменение по внешнему ключу:
ALTER TABLE base ADD CONSTRAINT base_last_modified_by_fkey FOREIGN KEY (last_modified_by) REFERENCES user_account_data(id);