无法使用CREATE或REPLACE重命名PostgreSQL视图中的列


37

在PostreSQL 8.3中,我试图创建一个视图,该视图看起来就像一个现有表,但是具有不同的列名。

这有效

CREATE OR REPLACE VIEW gfam.nice_builds AS 
 SELECT (family_tree.family_tree_id) as x,
        family_tree.family_tree_name, family_tree.family_tree_description
   FROM gfam.family_tree;

上面复制了family_tree表,但是以下尝试失败:

CREATE OR REPLACE VIEW gfam.nice_builds AS 
 SELECT (family_tree.family_tree_id) as x,
        family_tree.family_tree_name, family_tree.family_tree_description
   FROM gfam.family_tree;
  • 错误:无法更改视图列“ family_tree_id”的名称

如何重命名列?

Answers:


44

我可以重现您的错误...在我的情况下,我首先创建了一个列,将其作为“日期”,然后将其创建为“ x”(试图查看是否是保留字的问题;不是:

ERROR:  cannot change name of view column "date" to "x"

如果您drop view先发布,则可以使用更改后的名称重新创建视图。我不知道为什么create or replace不这样做。


科林·哈特(Colin't Hart)的澄清:

对文档CREATE VIEW解释了它非常好,我认为:

新查询必须生成与现有视图查询生成的列相同的列(即,相同的列名以相同的顺序和相同的数据类型),但是它可能会将其他列添加到列表的末尾。


确实,您必须将新列添加到SELECT列列表的末尾,否则会出现错误!

1
有点离题的评论:当试图借助视图聚合来自两个表的数据时,我遇到了类似的问题。但是确实VARCHARTEXT对于相同的命名列,我有不同的类型(在第一个表和第二个表中)。我花了很多时间进行调查,直到发现VARCHAR两个表都显示了IDE !只有纯洁的pg_dump帮助我。
flaz14

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.