隔离租户的一种可能方法是向每个表添加tenant_id
,并使用该字段确定每个请求的范围。
但是你必须非常小心并将其放在每个SQL查询中。
我想知道是否有办法告诉PostgreSQL自动执行此操作?像
这样的东西scope tenant_id = 'foo'
select * from my_table -- tenant_id = 'foo' should be added automatically
答案 0 :(得分:5)
您可以将视图与自定义配置参数结合使用,例如:
create table customers_table(id serial primary key, tenant_id int, name text);
insert into customers_table (tenant_id, name) values
(1, 'a'),
(2, 'b'),
(1, 'c'),
(2, 'd');
create view customers as
select *
from customers_table
where tenant_id = current_setting('glb.tenant_id')::int;
在选择查询中使用视图而不是表格。您必须设置自定义配置参数才能运行查询:
select * from customers;
ERROR: unrecognized configuration parameter "glb.tenant_id"
set glb.tenant_id to 1;
select * from customers;
id | tenant_id | name
----+-----------+------
1 | 1 | a
3 | 1 | c
(2 rows)