Não é possível renomear colunas nas visualizações do PostgreSQL com CREATE OR REPLACE

37

No PostreSQL 8.3, estou tentando criar uma exibição que se pareça com uma tabela existente, mas que tenha nomes de colunas diferentes.

Isso funciona

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;

O acima cria uma duplicata da tabela family_tree, mas a seguinte tentativa falha:

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;
  • ERRO: não é possível alterar a coluna do nome da visualização "family_tree_id"

Como posso renomear colunas?

Aleksandr Levchuk
fonte

Respostas:

45

Posso reproduzir o seu erro ... no meu caso, criei uma coluna primeiro como 'date' e depois como 'x' (estava tentando ver se havia algum problema com uma palavra reservada; não era:

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

Se você emitir pela drop viewprimeira vez, você poderá recriar a exibição com um nome alterado. Eu não tenho idéia do por create or replaceque não fará isso.


Esclarecimento de Colin 't Hart :

A documentação paraCREATE VIEW explica muito bem, eu acho:

A nova consulta deve gerar as mesmas colunas que foram geradas pela consulta de exibição existente (ou seja, os mesmos nomes de coluna na mesma ordem e com os mesmos tipos de dados), mas pode adicionar colunas adicionais ao final da lista.

Joe
fonte
Na verdade, você deve adicionar a nova coluna ao final da lista de colunas SELECT , caso contrário, receberá o erro!
1
Um comentário um pouco fora do tópico: enfrentei o problema semelhante ao tentar agregar dados de duas tabelas com a ajuda da visualização. Mas, na verdade, eu tinha tipos diferentes ( VARCHARna primeira tabela e TEXTna segunda tabela) para as mesmas colunas nomeadas. Passei muito tempo investigando até perceber que o IDE é exibido VARCHARnas duas tabelas! Apenas puro pg_dumpme ajudou.
flaz14
31

Você também pode ALTER TABLE tbl RENAME COLUMN foo TO barrenomear colunas da vista.

Peter Eisentraut
fonte
O que tem tblaqui? é a tabela real para a qual a visualização é criada ou esse é o nome da visualização?
Eugen Konkov 17/01
@EugenKonkov Parece ser a opinião. Eu testei e funciona
DatabaseShouter