Impossible de renommer les colonnes dans les vues PostgreSQL avec CREATE OR REPLACE

37

Dans PostreSQL 8.3, j'essaie de créer une vue qui ressemble à une table existante mais dont le nom des colonnes est différent.

Cela marche

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;

Ce qui précède crée une copie de la table family_tree mais la tentative suivante échoue:

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;
  • ERREUR: impossible de changer le nom de la colonne de vue "family_tree_id"

Comment puis-je renommer des colonnes?

Aleksandr Levchuk
la source

Réponses:

45

Je peux reproduire votre erreur ... Dans mon cas, j'ai d'abord créé une colonne sous la forme "date", puis "x" (j'essayais de voir si le problème concernait un mot réservé; ce n'était pas le cas:

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

Si vous en publiez une drop viewpremière, cela vous permettra de recréer la vue avec un nom modifié. Je ne sais pas pourquoicreate or replace ne le ferai pas.


Clarification par Colin 't Hart :

La documentation de l'CREATE VIEW explique assez bien, je pense:

La nouvelle requête doit générer les mêmes colonnes que celles générées par la requête de vue existante (c'est-à-dire, les mêmes noms de colonnes dans le même ordre et avec les mêmes types de données), mais elle peut ajouter des colonnes supplémentaires à la fin de la liste.

Joe
la source
En effet, vous devez ajouter la nouvelle colonne à la fin de la liste de colonnes SELECT , sinon vous obtiendrez l'erreur!
1
Commentaire un peu hors sujet: j'ai rencontré le même problème lorsque j'ai essayé d'agréger les données de deux tables à l'aide de la vue. Mais en effet j'avais différents types ( VARCHARdans le premier tableau et TEXTdans le second tableau) pour les mêmes colonnes nommées. J'ai passé beaucoup de temps à enquêter jusqu'à ce que je remarque que l'IDE s'affiche VARCHARpour les deux tables! Seulement pur pg_dumpm'a aidé.
flaz14
31

Vous pouvez également ALTER TABLE tbl RENAME COLUMN foo TO barrenommer les colonnes de vue.

Peter Eisentraut
la source
Qu'est-ce qu'il y a tblici? s'agit-il d'une table pour laquelle la vue est créée ou s'agit-il du nom de la vue?
Eugen Konkov
@ EugenKonkov Il semble être la vue. Je l'ai testé et cela fonctionne
DatabaseShouter