我对PostgreSQL很新,并且有一个基本的设计问题,我想要一些建议。
我们公司在PostgreSQL数据库中定义了1000多个相同的模式。 我们为每个客户定义了单独的架构(工作场所)。 整个DB Schema设计是无法改变的。
我们必须创建例程,这些例程将从所有模式中收集数据,并将其存储在DataTables中的单独(集中)模式中。
一种方法是使用npgsql接口编写基于.Net的应用程序。应用程序将遍历所有模式并运行动态(内联)SQL以返回所需数据。
另一种方法是将所有数据收集例程推送到PostgreSQL函数中。这些函数将包含动态SQL,接受模式作为参数,然后针对目标模式运行该SQL。
这两种方法的表现有何不同? 我试图找出哪种方法在性能和可维护性方面最好。
有更好的方法吗?
谢谢, JohnB
答案 0 :(得分:0)
您只需使用其他地方定义的单个函数在模式之间导航:
create table public.t (i int);
在某个模式中创建一个函数,该模式使用所有模式共有的对象:
create function public.f()
returns t as $$
select * from t;
$$ language sql;
导航到要使用该功能的架构:
create schema s1;
set schema 's1';
create table s1.t (like public.t);
insert into s1.t (i) values (1);
由于's1'是当前架构,该函数将查询该架构中的对象:
select * from public.f();
i
---
1
搜索操作架构search_path的选项