在PostreSQL 8.3中,我试图创建一个外观类似于现有表但具有不同列名的视图。

这有效

上面的内容与family_tree表相同,但以下尝试失败:

如何重命名列?

#1 楼

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

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


如果您首先发布drop view,它将让您以更改的名称重新创建视图。我不知道为什么create or replace不会这样做。 >

Colin't Hart所作的澄清:

CREATE VIEW的文档解释得很好,我认为:


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

评论


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

–user4584
15年3月24日在8:55



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

– flz14
16 Jun 23'11:01



#2 楼

您也可以使用ALTER TABLE view_name RENAME COLUMN foo TO bar重命名视图列。

评论


这里是什么?是为其创建视图的实际表,还是视图名称?

– Eugen Konkov
19年1月17日在11:48

@EugenKonkov看来是这样。我测试了它并且有效

–DatabaseShouter
19年11月21日在11:11

#3 楼

这是因为视图已经保存了列名。删除保存的视图,然后使用新的“ AS”列名称运行修改后的视图。