Le viste materializzate consentono di archiviare fisicamente i risultati di query complesse e di aggiornarli periodicamente. Sono quindi utili nei casi in cui è necessario un rapido accesso ai dati per il reporting e la business intelligence. Ecco come creare una vista materializzata in PostgreSQL.
Vista PostgreSQL e vista materializzata
Le viste materializzate sono simili alle viste PostgreSQL che consentono di archiviare query SQL per richiamarle in seguito. Tuttavia, la visualizzazione PostgreSQL consente di memorizzare solo la query SQL e non il suo risultato. Le viste materializzate consentono di archiviare fisicamente il risultato della query e di aggiornarlo periodicamente. Di conseguenza, le viste materializzate sono più veloci delle viste PostgreSQL.
Bonus Leggi:Come ottenere l'ultima riga per gruppo in PostgreSQL
Come creare una vista materializzata in PostgreSQL
Puoi creare una vista materializzata in PostgreSQL usando l'istruzione CREATE MATERIALIZED VIEW come mostrato di seguito.
CREATE MATERIALIZED VIEW view_name AS query WITH [NO] DATA;
Nella dichiarazione sopra, devi menzionare view_name così come la query di cui desideri memorizzare il risultato nella vista materializzata.
Infine, puoi anche specificare l'opzione WITH DATA se vuoi caricare i dati nella vista al momento della sua creazione. Se menzioni SENZA DATI, la vista verrà contrassegnata come illeggibile e non sarai in grado di eseguire query sui dati dalla vista finché non carichi i dati al suo interno.
Bonus Lettura:funzione di creazione di PostgreSQL
Aggiornamento vista materializzato PostgreSQL
Puoi caricare i dati nella vista materializzata usando l'istruzione REFRESH MATERIALIZED VIEW come mostrato
REFRESH MATERIALIZED VIEW view_name
Puoi anche utilizzare la dichiarazione sopra per aggiornare la vista materializzata.
Si noti che l'istruzione REFRESH MATERIALIZED VIEW blocca i dati della query in modo che non sia possibile eseguire query su di essi. Puoi evitarlo usando l'opzione CONTEMPORANEAMENTE
REFRESH MATERIALIZED VIEW CONCURRENTLY view_name
In questo caso, PostgreSQL crea una vista temporanea, la confronta con quella originale ed effettua gli inserimenti, gli aggiornamenti e le eliminazioni necessari. Di conseguenza, l'opzione CONCURRENTLY è disponibile solo per le viste materializzate che hanno un indice univoco.
Per aggiornare automaticamente la vista materializzata periodicamente, puoi eseguire AGGIORNA LA VISTA MATERIALE tramite uno script automatico.
Bonus Lettura:PostgreSQL Crea Schema
Rimuovi le visualizzazioni materializzate
È possibile eliminare le viste materializzate utilizzando l'istruzione DROP MATERIALIZED VIEW.
DROP MATERIALIZED VIEW view_name
Esempi di viste materializzate
Diamo un'occhiata ad alcuni esempi di viste materializzate.
Ecco la query per creare una vista materializzata chiamata sample_view
postgres=# create materialized view sample_view as select * from sales with no data;
Nella query precedente abbiamo menzionato l'opzione SENZA DATI, quindi la vista non conterrà alcun dato e darà un errore quando proveremo a interrogarlo.
postgres=# select * from sample_view; ERROR: materialized view "sample_view" has not been populated HINT: Use the REFRESH MATERIALIZED VIEW command.
Ora aggiorneremo la vista per caricare i dati al suo interno e quindi eseguiremo la query precedente sulla nostra vista.
postgres=# refresh materialized view sample_view; REFRESH MATERIALIZED VIEW postgres=# select * from sample_view; order_date | sale ------------+------ 2020-04-01 | 210 2020-04-02 | 125 2020-04-03 | 150 2020-04-04 | 230 2020-04-05 | 200 2020-04-10 | 220 2020-04-06 | 250 2020-04-07 | 215 2020-04-08 | 300 2020-04-09 | 250
Come puoi vedere sopra, quando eseguiamo di nuovo la nostra query, otteniamo il risultato.
Si spera che ora tu possa creare facilmente una vista materializzata per il tuo database.
Ubiq semplifica la visualizzazione dei dati in pochi minuti e il monitoraggio in dashboard in tempo reale. Provalo oggi!