Palun tooge näide psqlis gexec käsu kasutamise kohta

Postitas Erki Eessaar 28.11.2024 11:55 (muudeti 28.11.2024 12:10)
Oletame, et meil on andmebaas kontseptuaalse struktuuriga:

[Auto_seisundi_liik]-1-------------0..*-[Auto]

Andmebaasis luuakse vaated:

CREATE OR REPLACE VIEW aktiivsed_autod AS 
SELECT auto_kood 
FROM Auto
WHERE auto_seisundi_liik_kood=2;
 
CREATE OR REPLACE VIEW mitteaktiivsed_autod AS 
SELECT auto_kood 
FROM Auto
WHERE auto_seisundi_liik_kood=3;

Alles peale vaadete loomist meenub, et vaadetele oleks vaja määrata turvabarjäär, et vaatesse ei saaks "sisse häkkida" ja näha andmeid, mida vaate looja pole ette näinud. Seda omadust saab määrata vaate loomisel, kuid seda saab ka ALTER VIEW lausega juurde lisada.

Teen süsteemikataloogi vaate põhjal päringu, et leida skeemis public olevad vaated. Sellesse skeemi pannakse vaikimisi kõik kasutajate loodud skeemiobjektid.

SELECT table_schema, table_name
FROM INFORMATION_SCHEMA.tables
WHERE table_type='VIEW'
AND table_schema='public';

Kasutan format funktsiooni, et panna kokku ALTER VIEW laused turvabarjääri lisamiseks. Lausete koostamiseks kasutatakse süsteemikataloogi vaatest päringuga leitud skeemi nime ja vaate nime.
 
SELECT format('ALTER VIEW %1$I.%2$I SET (security_barrier=TRUE);', table_schema, table_name) AS statements
FROM INFORMATION_SCHEMA.tables
WHERE table_type='VIEW'
AND table_schema='public';

Need laused saaks kopeerida ja käivitada, kuid psqlis saab nende lausete käivitamist gexec käsu abil automatiseerida.
 
SELECT format('ALTER VIEW %1$I.%2$I SET (security_barrier=TRUE);', table_schema, table_name) AS statements
FROM INFORMATION_SCHEMA.tables
WHERE table_type='VIEW'
AND table_schema='public'
\gexec

Veel üks näide, kus genereeritakse vaadete kustutamise laused ja käivitatakse need automaatselt.
 
SELECT format('DROP VIEW %1$I.%2$I CASCADE;', table_schema, table_name) AS statements
FROM INFORMATION_SCHEMA.tables
WHERE table_type='VIEW'
AND table_schema='public'
\gexec

Hinda postitust:

Keskmine hinne : Pole veel hinnanguid!