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"의 ​​이름을 변경할 수 없습니다

열 이름을 바꾸려면 어떻게해야합니까?

답변:


44

오류를 재현 할 수 있습니다 ... 제 경우에는 먼저 '날짜'로 열을 만든 다음 'x'로 열을 만들었습니다 (예약어에 문제가 있는지 확인하려고했습니다.

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

drop view첫 번째 를 발행 하면 변경된 이름으로 뷰를 다시 만들 수 있습니다. 왜 create or replace그렇게하지 않을지 모르겠습니다 .


Colin 't Hart에 의한 설명 :

에 대한 설명서가CREATE VIEW 꽤 잘 설명되어 있습니다.

새 쿼리는 기존 뷰 쿼리에서 생성 한 것과 동일한 열 (즉, 동일한 순서 및 동일한 데이터 유형의 동일한 열 이름)을 생성해야하지만 목록 끝에 추가 열을 추가 할 수 있습니다.


실제로 SELECT 열 목록 끝에 새 열추가해야합니다 . 그렇지 않으면 오류가 발생합니다!

1
주제를 벗어난 약간의 의견 : 두 테이블에서 데이터를 집계하려고 할 때 비슷한 문제에 직면했습니다. 그러나 실제로 동일한 명명 된 열에 대해 다른 유형 ( VARCHAR첫 번째 테이블 및 TEXT두 번째 테이블)이있었습니다. IDE가 VARCHAR두 테이블 모두에 대해 표시 되는 것을 알 때까지 조사에 많은 시간을 보냈습니다 ! 오직 순수한 만이 pg_dump나를 도왔습니다.
flaz14

30

ALTER TABLE tbl RENAME COLUMN foo TO bar뷰 열의 이름도 바꿀 수 있습니다 .


tbl여기 가 무엇입니까 ? 뷰가 작성되는 실제 테이블입니까 아니면 뷰 이름입니까?
Eugen Konkov
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.