Andmebaasid II (ITI0207) (sügis 2023)

Küsimus

Anonüümne
Tegin pgApexis vaadete ekraanivorme ning avastasin, et vaatest oli väli puudu. pgApex näitas vaatele vastaval ekraanivormil päringu tulemusel saadud andmeid. Lisasin puuduva välja kustutades vastava vaate ning luues selle uuesti. Kuid nüüd ei näita pgApex enam vastavas vaates andmeid. Testimiseks tegin uue rakenduse, aga ka seal ei tekkinud otsitavad andmed.

Kas ja kuidas mul oleks võimalik vaadete andmed uuesti rakendusse saada? Mida ma saaksin edaspidi teist moodi teha, et rohkem sellist probleemi ei esineks?

Vastus: Probleem on selles, et rakendusele vastaval kasutajal pole õigust vaatest andmeid küsida (SELECT õigus). See õigus läks kaotsi, kui vaate kustutasite ja uuesti lõite (DROP lause + CREATE lause). Lahenduseks on anda rakendusele vastavale kasutajale uuesti vaadetest andmete lugemise õigus. Seega tuleb peale vaate kustutamist ja uuesti loomist käivitada ka GRANT laused vaate suhtes õiguste jagamiseks.

Kui asendate vaate CREATE OR REPLACE lausega, siis on tulemuseks sama vaade ja õigused säilivad. Kuid on tõsi, et:

  • vaatesse veeru lisamiseks,
  • vaatest veeru eemaldamiseks,
  • vaate veeru andmetüübi muutumisel,

tuleb vaade kustutada ja uuesti luua.

CREATE OR REPLACE lausest piisab, kui muudate vaadet nii, et selle veerud jäävad samaks (nt lisate või eemaldate alampäringust tingimusi).

Hinda vastust:

Keskmine hinne: Pole veel hinnanguid!