SQL视图会自动扩展splat运算符

时间:2016-02-18 15:33:42

标签: sql postgresql view

当我创建视图时,我意外地发现每个splat操作符都会自动扩展。例如,使用以下设置:

CREATE TABLE test (
    a integer,
    b integer,
    c integer
);
INSERT INTO test VALUES (1,2,3), (10,20,30);

CREATE VIEW test_view AS SELECT * FROM test;

以下SELECT语句返回相同的结果:

SELECT * FROM test;
SELECT * FROM test_view;

但是,如果我在原始表中添加一列:

ALTER TABLE test ADD COLUMN x text DEFAULT 'new column';

...并发出与以前相同的SELECT语句,查询视图时,新列会丢失。事实上,我使用pg_get_viewdef函数验证了我的视图的实际定义 - splat已自动扩展到a,b和c列。

为什么它会像这样实现,我可以防止这种行为发生吗?

目前,我迫切需要创建多个视图来过滤表格的内容。但是,它们的整体结构将来可能会发生变化 - 可能会添加新列,有些可能会被剥离。在这一点上,我必须在更改表格后更新每个视图,坦率地说,我不喜欢这个声音。

我正在使用PostgreSQL 9.4

0 个答案:

没有答案