Materialiserede visninger giver dig mulighed for at gemme resultater af komplekse forespørgsler fysisk og opdatere dem med jævne mellemrum. Så de er nyttige i tilfælde, hvor du har brug for hurtig dataadgang til rapportering og business intelligence. Sådan opretter du materialiseret visning i PostgreSQL.
PostgreSQL-visning vs materialiseret visning
Materialiserede visninger ligner PostgreSQL-visninger, som giver dig mulighed for at gemme SQL-forespørgsler for at kalde dem senere. PostgreSQL-visningen tillader dig dog kun at gemme SQL-forespørgslen og ikke dens resultat. Materialiserede visninger giver dig mulighed for at gemme forespørgselsresultatet fysisk og opdatere dem med jævne mellemrum. Som et resultat er materialiserede visninger hurtigere end PostgreSQL-visninger.
Bonus Læs:Sådan får du sidste række pr. gruppe i PostgreSQL
Sådan opretter du materialiseret visning i PostgreSQL
Du kan oprette materialiseret visning i PostgreSQL ved hjælp af CREATE MATERIALIZED VIEW-sætning som vist nedenfor.
CREATE MATERIALIZED VIEW view_name AS query WITH [NO] DATA;
I ovenstående erklæring skal du nævne view_name samt forespørgslen hvis resultat du vil gemme i den materialiserede visning.
Endelig kan du også angive indstillingen MED DATA, hvis du vil indlæse data i visningen på tidspunktet for dens oprettelse. Hvis du nævner WITH NO DATA, vil visningen blive markeret som ulæselig, og du vil ikke være i stand til at forespørge data fra visningen, før du indlæser data i den.
Bonus Læs:PostgreSQL Create Function
PostgreSQL-materialiseret visningsopdatering
Du kan indlæse data i materialiseret visning ved at bruge REFRESH MATERIALIZED VIEW-sætning som vist
REFRESH MATERIALIZED VIEW view_name
Du kan også bruge ovenstående erklæring til at opdatere materialiseret visning.
Bemærk venligst, REFRESH MATERIALIZED VIEW-sætningen låser forespørgselsdataene, så du ikke kan køre forespørgsler mod dem. Du kan undgå det ved at bruge CONCURRENTLY option
REFRESH MATERIALIZED VIEW CONCURRENTLY view_name
I dette tilfælde opretter PostgreSQL en midlertidig visning, sammenligner den med den originale og foretager nødvendige indsættelser, opdateringer og sletninger. Som et resultat er indstillingen SAMTIDIGT kun tilgængelig for materialiserede visninger, der har et unikt indeks.
For at automatisk opdatere materialiseret visning med jævne mellemrum, kan du køre REFRESH MATERIALIZED VIEW via et automatiseret script.
Bonus Læs:PostgreSQL Opret skema
Fjern materialiserede visninger
Du kan slette materialiserede visninger ved at bruge DROP MATERIALIZED VIEW-sætning.
DROP MATERIALIZED VIEW view_name
Eksempler på materialiseret visning
Lad os se på nogle materialiserede eksempler.
Her er forespørgslen om at oprette en materialiseret visning kaldet sample_view
postgres=# create materialized view sample_view as select * from sales with no data;
I ovenstående forespørgsel har vi nævnt WITH NO DATA mulighed, så visningen vil ikke have nogen data og vil give en fejl, når vi forsøger at forespørge den.
postgres=# select * from sample_view; ERROR: materialized view "sample_view" has not been populated HINT: Use the REFRESH MATERIALIZED VIEW command.
Nu vil vi opdatere visningen for at indlæse data i den og derefter køre ovenstående forespørgsel mod vores visning.
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
Som du kan se ovenfor, når vi kører vores forespørgsel igen, får vi resultatet.
Forhåbentlig kan du nu nemt oprette materialiseret visning til din database.
Ubiq gør det nemt at visualisere data på få minutter og overvåge i dashboards i realtid. Prøv det i dag!