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?

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.


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.


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.