it-swarm.it

Impossibile rinominare le colonne nelle viste PostgreSQL con CREATE OR REPLACE

In PostreSQL 8.3, sto cercando di creare una vista che assomiglierà a una tabella esistente ma con nomi di colonna diversi.

Questo funziona

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;

Quanto sopra crea un duplicato della tabella family_tree ma il seguente tentativo fallisce:

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;
  • ERRORE: impossibile cambiare il nome della colonna della vista "family_tree_id"

Come posso rinominare le colonne?

40

Posso riprodurre il tuo errore ... nel mio caso, ho creato una colonna prima come 'data' e poi come 'x' (stavo cercando di vedere se si trattava di un problema con una parola riservata; non era:

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

Se emetti un drop view prima, ti permetterà di ricreare la vista con un nome modificato. Non ho idea del perché create or replace non lo farà.


Chiarimento di Colin 't Hart :

Il documentazione per CREATE VIEW lo spiega abbastanza bene, penso:

La nuova query deve generare le stesse colonne generate dalla query di visualizzazione esistente (ovvero gli stessi nomi di colonna nello stesso ordine e con gli stessi tipi di dati), ma può aggiungere colonne aggiuntive alla fine dell'elenco.

50
Joe

Puoi usare ALTER TABLE tbl RENAME COLUMN foo TO bar per rinominare anche le colonne della vista.

31
Peter Eisentraut