gwtipstricks:idxtipstricks:appuntipostgres

Differenze

Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.

Link a questa pagina di confronto

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.
  
  • gwtipstricks/idxtipstricks/appuntipostgres.1573029751.txt.gz
  • Ultima modifica: 2019/11/06 09:42
  • da 127.0.0.1