web-dev-qa-db-fra.com

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

Dans PostreSQL 8.3, j'essaie de créer une vue qui ressemblera à une table existante mais avec des noms de colonne différents.

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 un doublon 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 modifier le nom de la colonne de vue "family_tree_id"

Comment renommer des colonnes?

40
Aleksandr Levchuk

Je peux reproduire votre erreur ... dans mon cas, j'ai créé une colonne d'abord comme 'date' puis comme 'x' (essayait de voir si c'était un problème avec un mot réservé; ce n'était pas:

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

Si vous émettez un drop view d'abord, il vous permettra de recréer la vue avec un nom modifié. Je ne sais pas pourquoi create or replace ne le fera pas.


Clarification par Colin 't Hart :

documentation pour CREATE VIEW l'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.

50
Joe

Vous pouvez utiliser ALTER TABLE tbl RENAME COLUMN foo TO bar pour renommer également les colonnes de vue.

31
Peter Eisentraut