Postgres concat模式

问题描述 投票:0回答:1

我的一个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)
);

现在,我想知道当我从插入相应模式的超级用户表中删除用户时如何创建触发器

postgresql schema concat
1个回答
0
投票

您可以从每个区域中删除(删除)表,然后重新创建为视图(或实体化视图)。

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而不是存储位置。再次只是一个强烈的建议。

© www.soinside.com 2019 - 2024. All rights reserved.