postgresql - 重命名 View 中的列 : bug or feature?

标签 postgresql view materialized-views

我在 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/

相关文章:

postgresql - PostgreSQL 中的 bit_count 函数

Oracle物化 View 与 "not exists"一起使用

oracle - 物化 View : how can I find the number of updates, 在刷新期间插入和删除?

sql - 为什么Oracle中不推荐直接引用物化 View ?

python - Web 应用程序中高效的作业进度更新

database - 批处理/拆分 PostgreSQL 数据库

postgresql - Postgres DB 未在 Docker 中启动 - Mac

ios - 点击后隐藏 View

android - 在自定义 View 中覆盖空方法并在 MainActivity 中处理它

view - REBOL/View 有帮助系统吗?