我正在尝试在存在于具有相同名称的多个模式中的表上创建一个视图(或在每个模式中使用而不进行修改的视图)
create schema company_1;
create schema company_2;
...
CREATE TABLE company_1.orders
(
id serial NOT NULL,
amount real,
paid real,
CONSTRAINT orders_pkey PRIMARY KEY (id )
)
WITH (
OIDS=FALSE
);
CREATE TABLE company_2.orders
(
id serial NOT NULL,
amount real,
paid real,
CONSTRAINT orders_pkey PRIMARY KEY (id )
)
WITH (
OIDS=FALSE
);
....
在不为每个视图指定架构或指定当前架构的情况下创建表订单视图的正确方法是什么?
我需要但未能得到的是
CREATE OR REPLACE VIEW
public.full_orders AS
SELECT id, amount FROM orders;
或者
CREATE OR REPLACE VIEW
company_1.full_orders AS
-- company_2.full_orders AS
-- company_n.full_orders AS
SELECT id, amount FROM current_schema.orders;
使用 PostgreSQL 9.2.2
编辑:我去的方式:
CREATE VIEW company_1.full_orders AS
SELECT id, amount FROM company_1.orders;
在这里讨论的模式副本上,我这样做
FOR src_table IN
SELECT table_name
FROM information_schema.TABLES
WHERE table_schema = source_schema AND table_type = 'VIEW'
LOOP
SELECT view_definition
FROM information_schema.views
WHERE table_name = src_table AND table_schema = source_schema INTO q;
trg_table := target_schema||'.'||src_table;
EXECUTE 'CREATE VIEW ' || trg_table || ' AS '||replace(q, source_schema, target_schema);
END LOOP;
仍在寻找更好的解决方案...