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

PostgreSQL materialiseret visning

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!

  1. Tillader Oracle muligheden for uforpligtende læsning?

  2. Sådan fungerer ADDDATE() i MariaDB

  3. Brug XEvent Profiler til at fange forespørgsler i SQL Server

  4. Hvilken datamaskeringsfunktion skal jeg bruge?