Impossibile rinominare le colonne nelle viste PostgreSQL con CREATE OR REPLACE


37

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?

Risposte:


45

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 viewprimo, ti consentirà di ricreare la vista con un nome modificato. Non ho idea del perché create or replacenon lo faccia.


Chiarimento di Colin 't Hart :

La documentazione per loCREATE VIEW 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.


In effetti, devi aggiungere la nuova colonna alla fine dell'elenco delle colonne SELEZIONA , altrimenti otterrai l'errore!

1
Un commento un po 'fuori tema: ho affrontato il problema simile quando ho cercato di aggregare i dati da due tabelle con l'aiuto della vista. Ma in effetti avevo tipi diversi ( VARCHARnella prima tabella e TEXTnella seconda tabella) per le stesse colonne con nome. Ho trascorso molto tempo per indagare fino a quando ho notato che IDE viene visualizzato VARCHARper entrambe le tabelle! Solo il puro pg_dumpmi ha aiutato.
flaz14,

31

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


Cosa c'è tblqui? è la tabella effettiva per quale vista viene creata o questo è il nome della vista?
Eugen Konkov,

@EugenKonkov Sembra essere la vista. L'ho provato e funziona
DatabaseShouter il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.