PostgreSQL(至少到9.4版本为止)目前不支持使用CREATE OR REPLACE VIEW
删除列。
新查询必须生成与现有视图查询生成的相同列(即相同的列名、相同的顺序和相同的数据类型),但可以在列表末尾添加附加列。
没有根本原因不能添加删除列的支持,但目前还没有人做到实现它所需的工作。
CREATE OR REPLACE VIEW
必须递归扫描所有依赖项,并确保其中没有引用要删除的列。如果它们使用了SELECT *
,则必须从依赖项中的*
扩展中删除该列,然后再扫描它的依赖项。这需要一些工作量,并且在某些情况下,删除列的行为如何与转储和重新加载进行交互方面还不太清楚。因此,目前还没有人希望实现这个功能。欢迎提供补丁和/或开发赞助。
ALTER VIEW ... ADD COLUMN
。你是使用CREATE OR REPLACE VIEW
吗?请展示你的代码。 - Craig RingerCREATE OR REPLACE VIEW
与相同的定义,只是多了一列(因为引用的表添加了新列,所以视图必须包含它)。"devolution"从引用的表中移除了该列,因此VIEW
也必须不再返回它。 - Yanick Rochon