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

Ale*_*huk 52 postgresql

在 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;
Run Code Online (Sandbox Code Playgroud)

以上复制了 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;
Run Code Online (Sandbox Code Playgroud)
  • 错误:无法更改视图列“family_tree_id”的名称

如何重命名列?

Joe*_*Joe 63

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

ERROR:  cannot change name of view column "date" to "x"
Run Code Online (Sandbox Code Playgroud)

如果您发出drop view第一个,它会让您重新创建具有更改名称的视图。我不知道为什么create or replace不这样做。


澄清科林“T哈特

文档CREATE VIEW很好地解释了它,我认为:

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

  • 确实,您必须**将新列添加到 SELECT 列列表的末尾**,否则会出现错误! (2认同)

Pet*_*aut 35

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