Безопасность на уровне строк, неоднозначная ссылка

Я пытаюсь создать политику в 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
Другие вопросы по тегам