Andmebaasid II (ITI0207) (sügis 2023)

Küsimus

Esiletõstetud
Erki Eessaar
Käivitan PostgreSQLis funktsiooni, kuid seda ei täideta, sest ei leita funktsioonis viidatud tabelit. Mis on viga ja kuidas seda lahendada?

Näide: Lõin andmebaasis funktsiooni f_on_juhataja

SELECT f_on_juhataja(p_kasutajanimi:='joy.hawkins@geekosis.name', p_parool:='Boss');

ERROR: relation "isik" does not exist

LINE 2: FROM isik INNER JOIN tootaja ON isik.isik_id = tootaja.isik_...

Vastus: Kirjutasite funktsiooni loomise lauses:

SET search_path = 'public, pg_temp'

Tekst, mis on apostroofide e ülakomade vahel, on PostgreSQLi jaoks kokku üks skeemi nimi. PostgreSQL hakkas otsima sellise nimega skeemist tabelit Isik. Kuna sellist skeemi andmebaasis ei ole, siis ei leitud ka tabelit.

Õige on kirjutada otsingutee ilma ülakomadeta:

SET search_path = public, pg_temp

Otsingutee on vajalik, et SECURITY DEFINER funktsioon oleks turvaline.

Hinda vastust:

Keskmine hinne: Pole veel hinnanguid!