TL; DR: на Postgres 10.6 Когда действует защита на уровне строк - я не получаю раздел «ДЕТАЛИ» уникальной ошибки нарушения ограничения, даже если эта роль может видеть / вставлять все строки.
У меня есть 2 роли: admin
(владелец таблиц) и app_role
, на которых действует защита на уровне строк.
Вот как воспроизвести:
--using the admin role
create table parents(
parent_id int primary key,
parent_name text unique
);
create table childs(
child_id int primary key,
child_name text,
parent_id int references parents (parent_id),
constraint childs_uq unique (parent_id, child_name)
);
insert into parents values(1,'aaa');
insert into childs values(1,'bbb',1);
insert into childs values(2,'bbb',1);
--SQL Error [23505]: ERROR: duplicate key value violates unique constraint "childs_uq"
-- Detail: Key (parent_id, child_name)=(1, bbb) already exists.
Обратите внимание на«Подробно: ключ (parent_id, child_name) = (1, bbb) уже существует.»
Роль app_role
получила следующие привилегии и политики RLS:
GRANT SELECT, UPDATE, INSERT, DELETE ON parents TO app_role;
GRANT SELECT, UPDATE, INSERT, DELETE ON childs TO app_role;
CREATE POLICY parents_select
ON parents
AS permissive
FOR SELECT
TO app_role
USING (true);
alter table parents enable row level security;
CREATE POLICY childs_select
ON childs
AS permissive
FOR SELECT
TO app_role
USING (true);
CREATE POLICY childs_insert
ON childs
AS permissive
FOR INSERT
TO app_role
WITH CHECK (true);
alter table childs enable row level security;
Теперь дляпроблема:
--using `app_role`
insert into childs values(3,'ccc',1); -- works
insert into childs values(2,'bbb',1);
--SQL Error [23505]: ERROR: duplicate key value violates unique constraint "childs_uq"
Ошибка не содержит раздел «Сведения».
Это ошибка?Ожидаемое поведение (хотелось бы увидеть ссылку на документацию)?