2010-08-29 11 views
13

PostgreSQL non consente di alterare una vista (ad esempio aggiungendo colonne, cambiando ordini di colonne, aggiungendo criteri ecc.) Se ha oggetti dipendenti. Questo è davvero sempre fastidioso perché si deve scrivere uno script per:Come ALTERare una vista in PostgreSQL

  1. goccia tutti gli oggetti dipendenti,
  2. alterare la vista,
  3. ricreare tutte le oggetti dipendenti di nuovo.

Capisco che gli sviluppatori di PostgreSQL abbiano preoccupazioni molto ragionevoli per impedire la modifica delle visualizzazioni. Ma voi ragazzi avete qualche script/shot-cut per fare tutte quelle cose manuali in una sola volta?

risposta

4

L'aggiunta di nuove colonne non è un problema, la modifica dei tipi di dati o la modifica dell'ordine delle colonne, è lì che si verificano problemi.

  1. Non cambiare l'ordine, non è così importante in ogni caso, basta modificare la tua ricerca:

    selezionare un, b da view_name;

    SELECT b, a FROM nome_vista;

  2. Quando è necessario modificare un tipo di dati di una colonna, è necessario controllare anche gli oggetti dipendenti da . Questi potrebbero avere problemi con questo nuovo tipo di dati . Basta ottenere la definizione di questo oggetto e ricreare dopo le modifiche . L'information_schema e pg_catalog ti aiutano.

  3. Effettuare tutte le modifiche all'interno di una singola transazione .
+0

L'aggiunta di una colonna è un problema quando la vista ha oggetti dipendenti. Prova questo; CREATE TABLE uno ( col_a INT, col_b VARCHAR (2), col_c DATA ); CREARE O SOSTITUIRE visualizzazione vw_one AS SELECT col_a, col_b DA uno; CREARE O SOSTITUIRE VISTA vw_two AS SELECT col_a, col_b FROM vw_one; CREARE O SOSTITUIRE VISTA vw_one AS SELECT col_a, col_b, col_c DA uno; Mi manca qualcosa? – mevdiven

+0

Funziona bene qui, 9.0beta4. Non ho versioni precedenti nella mia macchina di sviluppo, ma dovrebbe funzionare anche in 8.4. Che messaggio di errore ricevi? –

+0

Potrebbe aver risolto la versione 9.0. Ho visto un paio di richieste di correzioni di bug nella comunità di PostgreSQL. Ecco l'errore che sto ottenendo. ERRORE: impossibile modificare il numero di colonne in vista Stato SQL: 42P16 – mevdiven

1

Se inserisco un "drop view addizionale xyz; commit;" prima dell'istruzione "crea o sostituisci vista xyz come ...", almeno in molti casi risolvo il problema di blocco sopra descritto.

Problemi correlati