Differenze
Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.
Entrambe le parti precedenti la revisione Revisione precedente Prossima revisione | Revisione precedente | ||
gwtipstricks:idxtipstricks:appuntipostgres [2020/09/11 16:28] giovanni.bifolchi |
gwtipstricks:idxtipstricks:appuntipostgres [2020/09/11 17:03] (versione attuale) giovanni.bifolchi |
||
---|---|---|---|
Linea 50: | Linea 50: | ||
- | ===== Velocizzare le Dipendenze di PostgreSQL ===== | + | ===== Modifiche di oggetti con dipendenze ===== |
- | Questa funzione permette di semplificare, le generose dipendenze di PostgreSQL. | + | ==== 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? | + | 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. | Oppure, dovete modificare una vista ma non potete perché questa ha altre viste dipendenti. Insomma, credo di aver reso bene l'idea. | ||
- | Prima di questa funzione, ho sempre fatto tutto a mano: salvato lo script della vista, eliminato la vista, modificato il campo e ricreato una vista. | + | 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? |
- | Diciamo che finché si tratta di una vista il problema non si pone, ma quando, come nel mio caso, 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. | 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 oggi salva, con un click, tutti gli script che ricreano le viste (o altre dipendenze) e con un altro le rigenera. | + | 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. | Il tutto senza uscire dall'interfaccia di Pgadmin, poiché si tratta di una funzione che si crea nel database. | ||
- | **Installazione** | + | ==== Installazione ==== |
- | Se vi interessa, potete scaricare la cartella condivisa via mail ed eseguire lo script su Pgadmin, contenuto nel file: Edit_4_gw_save_restore_dependencies_psql.sql | + | |
- | Questo non farà altro che creare: | + | |
- | - una tabella, dove verranno salvate le dipendenze, chiamata: deps_saved_ddl | + | |
- | - una funzione che salva (nella tabella) e cancella (dal database) le dipendenze di uno specifico oggetto: deps_save_and_drop_dependencies | + | |
- | - una funzione che ripristina le dipendenze, di uno specifico oggetto, nel database (prendendole dalla tabella in cui le avete salvate con lo script precedente): deps_restore_dependencies | + | |
- | Se vi interessano altre informazioni potete anche leggere il file: ReadMe.txt, che avevo personalmente scritto. | + | === Requisiti === |
+ | * PgAdmin | ||
+ | * {{ :gwtipstricks:idxtipstricks:dipendenze_postgresql.zip |}} | ||
- | Utilizzo | + | 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. | 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. | PostgreSQL vi bloccherà dicendo che esistono una o più viste dipendenti. | ||
Linea 80: | Linea 86: | ||
Con il nuovo metodo, potrete semplicemente aprire il Query Tool e scrivere: | Con il nuovo metodo, potrete semplicemente aprire il Query Tool e scrivere: | ||
- | select deps_save_and_drop_dependencies('nome_schema','nome_tabella') | + | <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. | Ho scritto "nome_tabella", ma ricordo che si può benissimo usare una vista come fonte. | ||
Linea 89: | Linea 95: | ||
Dopo la modifica l'utente dovrà tornare nel Query Tool e digitare: | Dopo la modifica l'utente dovrà tornare nel Query Tool e digitare: | ||
- | select deps_restore_dependencies('nome_schema','nome_tabella') | + | <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. | Successivamente le dipendenze saranno ripristinare nel database e senza aver salvato nessuno script in nessun foglio di Notepad. | ||
- | Possibili Problemi | + | === 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. | + | 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 a = b", dove a è il campo che volete modificare ( character varying) e b un altro campo character varying. Altrimenti, se avete fatto la modifica, dopo aver eseguito la funzione di ripristino delle dipendenze potreste beccarvi l'errore: ERROR: ERRORE: l'operatore non esiste: numeric = character varying. | + | 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: |
- | 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. | + | <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. | ||