CREATE OR 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」の名前を変更できません

列の名前を変更するにはどうすればよいですか?

回答:


45

私はあなたのエラーを再現することができます...私の場合、最初に「日付」、次に「x」として列を作成しました(予約語の問題であるかどうかを確認しようとしていましたが、そうではありませんでした:

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

drop view最初に発行すると、名前を変更してビューを再作成できます。なぜそうしcreate or replaceないのか分かりません。


Colin 't Hartによる明確化:

ドキュメントCREATE VIEWでかなりよく説明されていると思います:

新しいクエリは、既存のビュークエリによって生成された同じ列(つまり、同じ順序で同じデータ型の同じ列名)を生成する必要がありますが、リストの最後に列を追加する場合があります。


実際、新しい列をSELECT列リストの最後追加する必要があります。追加しないと、エラーが発生します!

1
ちょっとしたトピック外のコメント:ビューの助けを借りて2つのテーブルからデータを集約しようとしたときに、同様の問題に直面しました。しかし、実際には、同じ名前の列に対して異なるタイプ(VARCHAR最初のテーブルとTEXT2番目のテーブル)がありました。IDEがVARCHAR両方のテーブルに表示されることに気付くまで、調査に多くの時間を費やしました!純粋なだけがpg_dump助けてくれました。
flaz14

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.