Kuidas jõustada PostgreSQL andmebaasis kitsendus, et tabeli veerus hoitakse rahasummat eurodes?

Postitas Erki Eessaar 11.02.2024 11:19 (muudeti 11.02.2024 11:20)
Kitsendust eurode kohta ei saa ega pea andmebaasi lisama! Oletame, et andmebaasis on tabel:

Amet (amet_kood, nimetus, min_palk)
Primaarvõti (amet_kood)
Alternatiivvõti(nimetus)

Veerus min_palk on ametikohal makstav minimaalne palk eurodes. Eeldame, et selles veerus olevad arvud esitavad palka eurodes - see on see, kuidas veerus olevaid andmeid interpreteeritakse ja andmebaasi kasutajale peab selle selgeks tegema.

Veerg min_palk peaks olema tüüpi DECIMAL(täpsus,skaala) e NUMERIC(täpsus, skaala) ning ära tuleks määrata täpsus (precision) - kui mitu numbrikohta on väärtuses lubatud ja skaala (scale) - kui mitu numbrikohta on peale koma. Näiteks kui veerg min_palk oleks tüüpi DECIMAL(5,2), siis suurim võimalik minimaalne palk, mida saaks registreerida oleks 999.99 (viis numbrikohta, kaks kohta peale koma).

Kui soovime mõne päringu tulemuses näha palka nii, et seal on ka juures euro sümbol, siis tuleb päringu (SELECT lause) tulemuses palga väärtust formaatida. Selleks saab kasutada näiteks to_char funktsiooni.

SELECT amet_kood, nimetus, TO_CHAR(min_palk, '99999D99l') AS min_palk_formaaditud
FROM Amet
ORDER BY amet_kood;
 
"l" to_char mustris tähendab, et tuleks kasutada serveri lokaliseeringuga määratud valuutat. Kui päringu tulemuses on näiteks dollari sümbolid, siis saaks teha hoopis sellise päringu. || on stringide ühendamise e konkateneerimise operaator.
 
SELECT amet_kood, nimetus, TO_CHAR(min_palk, '99999D99') || ' EUR' AS min_palk_formaaditud
FROM Amet
ORDER BY amet_kood;

Hinda postitust:

Keskmine hinne : Pole veel hinnanguid!