小编Nus*_*evi的帖子

在postgres中,行级安全性(RLS)性能明显降低。

描述:这是性能问题的示例演示。

我们首先创建了两个表,启用了行级安全性,还创建了策略。

表定义:

create table sample_schema.sample_table1(ID numeric(38) PRIMARY KEY NOT NULL,
                 tenant_id VARCHAR(255) NOT NULL,
                 Description VARCHAR(255)
        );

create table sample_schema.sample_table2(ID2 numeric(38) PRIMARY KEY NOT NULL,
                 tenant_id VARCHAR(255) NOT NULL,
                 table1_id numeric (38),
                 Description2 VARCHAR(255)
        );    
Run Code Online (Sandbox Code Playgroud)

索引创建:

CREATE UNIQUE INDEX sample_table1_idx1 ON sample_schema.sample_table1(tenant_id,id);            
Run Code Online (Sandbox Code Playgroud)

启用行级安全性:

ALTER TABLE sample_schema.sample_table1 ENABLE ROW LEVEL SECURITY;   
Run Code Online (Sandbox Code Playgroud)

创建角色:

CREATE ROLE tenant_grp_role_p_id;    
Run Code Online (Sandbox Code Playgroud)

创建策略:我希望策略选择tenant_id列值具有与登录用户相同角色的数据。

CREATE POLICY Tenant_Roles ON  sample_schema.sample_table1 TO tenant_grp_role_p_id USING ((tenant_id) IN ( SELECT rolname FROM pg_roles WHERE    pg_has_role( current_user, oid, 'member')));
Run Code Online (Sandbox Code Playgroud)

创建样本数据:

insert into sample_schema.sample_table1 …
Run Code Online (Sandbox Code Playgroud)

sql postgresql row-level-security database-indexes postgresql-performance

5
推荐指数
1
解决办法
3828
查看次数