我在 Postgresql 9.4 实体化 View 中的列名有误。
我看了文档,语法是:
ALTER MATERIALIZED VIEW my_view_name
RENAME COLUMN old_name
TO new_name;
它运行良好。
然后我在非-物化 View 中出现了同样的拼写错误。我复制粘贴了请求,忘记删除关键字 MATERIALIZED
并且......它起作用了!
奇怪,如果我尝试:
ALTER VIEW my_view_name
RENAME COLUMN old_name
TO new_name;
它不起作用,我收到语法错误!
换句话说:似乎我只能使用实体化 View 的语法来更改普通 View 的列名。
这是错误还是功能?
重现步骤:
1) 创建一个简单的表
CREATE TABLE films (
code char(5) CONSTRAINT firstkey PRIMARY KEY,
title varchar(40) NOT NULL
);
2) 创建一个 View 作为一个简单的选择:
CREATE VIEW view_films AS SELECT * FROM films;
3) 尝试重命名列:
ALTER VIEW view_films RENAME COLUMN title TO new_title;
ERROR: syntax error at or near "COLUMN"
4) 尝试相同但使用关键字 MATERIALIZED
:
ALTER MATERIALIZED VIEW view_films RENAME COLUMN title TO new_title;
ALTER TABLE
最佳答案
我不确定 MATERIALIZED VIEW
但对于普通 View ;该 View 不存储任何数据,而只是一个保存的 SELECT
查询,在说 select * from view_name
时,它除了运行底层 SELECT
什么都不做> 针对目标表的语句。
因此,更改列名的 ALTER
语句应该针对创建 View 的表而不是 View 触发;它应该工作得很好。尝试以下:
CREATE TABLE films (
code char(5) CONSTRAINT firstkey PRIMARY KEY,
title varchar(40) NOT NULL
);
CREATE VIEW view_films AS SELECT * FROM films;
ALTER TABLE films RENAME COLUMN title TO new_title;
对于 MATERIALIZED VIEW
重命名列是可能的原因,它确实存储数据。
关于您的评论:您应该在 ALTERING
表架构之后重新创建 View 定义。检查这个 fiddle http://sqlfiddle.com/#!15/9ebe1/1
关于postgresql - 重命名 View 中的列 : bug or feature?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31741540/