Я пытаюсь создать политику в postgres, которая приводит к column reference "person_id" is ambiguous
.
Чтобы сделать небольшой аналогичный пример, давайте опишем 3 таблицы: person, group и group_member.
У человека есть: id, имя
В группе есть: id, person_id и имя
Член группы имеет: id, person_id, group_id
Я упростил свою политику, но соответствующая часть выглядит примерно так:
CREATE POLICY insert_group_member ON public."group" FOR INSERT TO user_role WITH CHECK (
EXISTS (
SELECT * FROM "group" AS g
LEFT JOIN "group_member" AS gm ON
g.person_id = gm.person_id
AND g.id = gm.group_id
WHERE
g.id = id AND
gm.person_id = person_id AND
g.members_can_invite = TRUE
)
);
person_id в этом случае может относиться к group.person_id или group_member.person_id из подвыбора, но я действительно хочу, чтобы это был person_id из «with check». Обычно это работает и в других местах.
Вопрос: есть ли способ четко указать, что столбец person_id исходит из политики, а не из выбора или объединения. Примечание. Я ожидал, что смещение имен таблиц решит эту проблему, но, похоже, это не так.
user_role.person_id
работает? - person Craig Ringer   schedule 09.10.2017missing FROM-clause entry for table "user_role"
- person Parris   schedule 09.10.2017user_role
? - person Laurenz Albe   schedule 09.10.2017CREATE ROLE user_role;
- person Parris   schedule 09.10.2017public."group"
неuser_role
- person Craig Ringer   schedule 09.10.2017