Jag antar att referenser till customer tabell och customer_id börjar med definitionen av dina users Tabell betyder egentligen att hänvisa till tenant och tenant_id .
Vid något tillfälle måste du lita på att din kod är korrekt. Om det inte är tillräckligt bra för dig och du måste ha begränsningar, så är det här jag skulle göra:
create or replace function user_role_check(_user_id uuid, _role_id uuid)
returns boolean as $$
select count(*) = 1
from roles r
join users u
on u.tenant_id = r.tenant_id
where u.id = _user_id
and r.id = _role_id;
$$ language sql;
create table user_roles (
id uuid not null primary key,
user_id uuid references users(id),
role_id uuid references roles(id),
check (user_role_check(user_id, role_id)),
unique (user_id, role_id)
);
Annars har du fastnat för att duplicera tenant_id till user_roles .