postgresql - Postgres 连接模式
问题描述
我的一个 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 不是它的存储位置。再次只是一个强烈的建议。
推荐阅读
- python - 无法将 BigQuery 表名作为 ValueProvider 传递给数据流模板
- c++ - 如何修复“& 需要左值”
- r - 在基本图例中画线点缀
- javascript - 从 mxGraph 输出 SVG 文件
- python-3.x - 在 Python 中更新绘图
- javascript - 如何通过使用 Vue.js 3 按下按钮来一一显示数组中的元素
- c# - Windows 窗体应用程序计时器问题
- swift - 在 Swift 和 Firebase 中检查和比较消息
- c++ - const成员函数和const-ref成员函数有什么区别
- flask - 在本地更新(Python Flask)后恢复 Auth0 访问令牌授权