我的一个PostgreSQL数据库包含共享相同结构的不同模式。
-- schema region_a
CREATE TABLE region_a.auth_user (
username NOT NULL,
password not null,
last_name NOT NULL,
Company varchar(255)
);
CREATE TABLE region_a.user_email (
useer_id NOT NULL,
email varchar(255)
);
-- schema region_b
CREATE TABLE region_b.auth_user (
username NOT NULL,
password not null,
last_name NOT NULL,
Company varchar(255)
);
CREATE TABLE region_b.user_email (
useer_id NOT NULL,
email varchar(255)
);
-- schema region_c
-- ...
我有一个超级用户表,在这种情况下,该表包含所有租户的所有用户
CREATE TABLE public.superusers (
username NOT NULL,
password not null,
last_name NOT NULL,
schema_nane NOT NULL,
Company varchar(255)
);
现在,我想知道当我从插入相应模式的超级用户表中删除用户时如何创建触发器
您可以从每个区域中删除(删除)表,然后重新创建为视图(或实体化视图)。
create table public.all_users (
id integer generated always as identity
, user_name text not null
, last_name text not null
, region text not null
, email varchar(255)
, company varchar(255)
, constraint all_users_pk
primary key (id)
);
create table public.all_users_password(
id integer
, password text -- should be encrypted
, constraint all_users_pw_pk
primary key (id)
, constraint all_users_pw_fk
foreign key (id)
references public.all_users(id)
) ;
create or replace view region_a.users as
select id
, user_name
, last_name
, email
, company
from public.all_users
where region = 'region_a' ;
create or replace view region_b.users as
select id
, user_name
, last_name
, email
, company
from public.all_users
where region = 'region_b' ;
--- same then for region_c, region_d, ...
注意:我将拆分密码删除到各自的表中,并且有意地未将它们包含在区域用户表中;这样做始终是安全漏洞。但是,如果需要,则包括在内。还将Schema_name列重命名为区域,即其ID而不是存储位置。再次只是一个强烈的建议。