Безопасность на уровне строк, неоднозначная ссылка
Я пытаюсь создать политику в Postgres, которая приводит к column reference "person_id" is ambiguous
,
Чтобы сделать небольшой аналогичный пример, давайте опишем 3 таблицы: person, group и group_member.
Человек имеет: идентификатор, имя
Группа имеет: 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, полученный из "с проверкой". Как правило, это работает в других местах.
Вопрос: есть ли способ четко указать, что столбец person_id исходит из политики, а не из выбора или объединения. Примечание: я ожидал, что псевдоним имен таблиц решит эту проблему, но, похоже, нет.
1 ответ
Вы должны квалифицировать все ссылки на столбцы, например:
...
WHERE g.id = "group".id
AND gm.person_id = "group".person_id