PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Vista materializzata di PostgreSQL

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!