Differenze
Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.
Prossima revisione | Revisione precedente | ||
gwtipstricks:idxtipstricks:appuntipostgres [2019/11/06 09:42] 127.0.0.1 modifica esterna |
gwtipstricks:idxtipstricks:appuntipostgres [2020/09/11 17:03] (versione attuale) giovanni.bifolchi |
||
---|---|---|---|
Linea 49: | Linea 49: | ||
</code> | </code> | ||
+ | |||
+ | ===== Modifiche di oggetti con dipendenze ===== | ||
+ | |||
+ | ==== Introduzione ==== | ||
+ | Questa funzione permette di velocizzare il ripristino di oggetti che dipedenvano da altri e bloccavano quindi la modifica della fonte. | ||
+ | |||
+ | Per spiegare meglio //"dipendenze"//, vi pongo un esempio: avete presente quando dovete modificare il //data type// di un campo in una tabella ma non potete perché questa ha delle viste che dipendono da essa? | ||
+ | Oppure, dovete modificare una vista ma non potete perché questa ha altre viste dipendenti. Insomma, credo di aver reso bene l'idea. | ||
+ | |||
+ | Senza questa funzione, si dovrebbe fare tutto a mano: salvare lo script della vista, eliminare la vista, modificare il campo e ricreare la vista. Diciamo che finché si tratta di una vista il problema non si pone, ma quando, ci sono più di 10 viste dipendenti dalla tabella? | ||
+ | |||
+ | Bene, qui entra in gioco la funzione di cui vi parlavo. Lo script non impedisce a PostgreSQL di generare dipendenze, perché queste sono una funzionalità efficace del software e ci aiutano a mantenere un prodotto funzionante, ma aiuta l'utente a risparmiare tempo nel ricreare tutte le viste (o altre dipendenze) a mano. | ||
+ | | ||
+ | Dunque, la funzione che vi consiglio salva, con un click, tutti gli script che ricreano le viste (o altre dipendenze) e con un altro le rigenera. | ||
+ | Il tutto senza uscire dall'interfaccia di Pgadmin, poiché si tratta di una funzione che si crea nel database. | ||
+ | |||
+ | ==== Installazione ==== | ||
+ | |||
+ | === Requisiti === | ||
+ | * PgAdmin | ||
+ | * {{ :gwtipstricks:idxtipstricks:dipendenze_postgresql.zip |}} | ||
+ | |||
+ | Scaricare la cartella condivisa ed eseguire lo script su Pgadmin, contenuto nel file: ''Edit_4_gw_save_restore_dependencies_psql.sql'' | ||
+ | |||
+ | Questo script genera: | ||
+ | * ''deps_saved_ddl'': tabella dove verranno salvate le dipendenze; | ||
+ | * ''deps_save_and_drop_dependencies'': funzione che salva (nella tabella) e cancella (dal database) le dipendenze di un oggetto specificato; | ||
+ | * ''deps_restore_dependencies'': funzione che ripristina le dipendenze nel database, di un oggetto specificato, prendendole dalla tabella in cui sono state salvate con la funzione precedente. | ||
+ | |||
+ | Se vi interessano altre informazioni potete anche leggere il file: ''ReadMe.txt'', che avevo personalmente scritto. | ||
+ | |||
+ | ==== Utilizzo ==== | ||
+ | Poniamo il caso che dobbiate modificare il data type di un campo in una tabella. | ||
+ | PostgreSQL vi bloccherà dicendo che esistono una o più viste dipendenti. | ||
+ | |||
+ | Con il nuovo metodo, potrete semplicemente aprire il Query Tool e scrivere: | ||
+ | |||
+ | <code sql>select deps_save_and_drop_dependencies('nome_schema','nome_tabella')</code> | ||
+ | |||
+ | Ho scritto "nome_tabella", ma ricordo che si può benissimo usare una vista come fonte. | ||
+ | Successivamente eseguire lo script. | ||
+ | |||
+ | Dopo aver eseguito lo script, le dipendenze scompariranno dal database e saranno inserite nella tabella prima creata. | ||
+ | Da qui l'utente può eseguire le modifiche che gli interessano: nel nostro esempio modificare il data type. | ||
+ | Dopo la modifica l'utente dovrà tornare nel Query Tool e digitare: | ||
+ | |||
+ | <code sql>select deps_restore_dependencies('nome_schema','nome_tabella')</code> | ||
+ | |||
+ | Successivamente le dipendenze saranno ripristinare nel database e senza aver salvato nessuno script in nessun foglio di Notepad. | ||
+ | |||
+ | === Possibili Problemi === | ||
+ | Va specificato un possibile problema: la funzione non fa //magie//, ma riscrive semplicemente gli script che dipendono da un oggetto al posto vostro. | ||
+ | Quindi se avete una tabella dove avete un campo character varying e necessitate di trasformarlo in un numeric, state bene attenti che le viste dipendenti non abbiano alcuna: "where X = Y", dove X è il campo che volete modificare (character varying) e Y un altro campo character varying. Altrimenti, se avete fatto la modifica, dopo aver eseguito la funzione di ripristino delle dipendenze potreste beccarvi l'errore: | ||
+ | |||
+ | <code sql>ERROR: ERRORE: l'operatore non esiste: numeric = character varying</code> | ||
+ | |||
+ | C'è comunque non modo per risolverlo, basterà entrare nella tabella ''deps_saved_ddl'', cercare la riga dove si trova lo script della vista incriminata e modificarla manualmente, ossia togliendo quella where o modificandola in modo da farla funzionare. Insomma nulla di impossibile ma fa sempre bene saperlo. | ||