不同的模式意味着不同的表,所以如果你要坚持这样的结构,这将意味着工会,一个或其他方式。这可能非常昂贵。如果您是在通过搜索路径的便利进行分区之后进行分区,则可能有意义地反转您的模式:
在公共模式中存储一个大表,然后在每个独立模式中设置视图。
看看这个sqlfiddle演示我的概念:
http://sqlfiddle.com/#!12/a326d/1
为后人也粘贴内联,如果sqlfiddle无法访问:
模式:
CREATE SCHEMA customer_1;
CREATE SCHEMA customer_2;
CREATE TABLE accounts(id serial, name text, value numeric, customer_id int);
CREATE INDEX ON accounts (customer_id);
CREATE VIEW customer_1.accounts AS SELECT id, name, value FROM public.accounts WHERE customer_id = 1;
CREATE VIEW customer_2.accounts AS SELECT id, name, value FROM public.accounts WHERE customer_id = 2;
INSERT INTO accounts(name, value, customer_id) VALUES('foo', 100, 1);
INSERT INTO accounts(name, value, customer_id) VALUES('bar', 100, 1);
INSERT INTO accounts(name, value, customer_id) VALUES('biz', 150, 2);
INSERT INTO accounts(name, value, customer_id) VALUES('baz', 75, 2);
查询:
SELECT SUM(value) FROM public.accounts;
SET search_path TO 'customer_1';
SELECT * FROM accounts;
SET search_path TO 'customer_2';
SELECT * FROM accounts;
个
结果:
425
1 foo 100
2 bar 100
3 biz 150
4 baz 75