Andmebaaside ajaveeb

Mõtteid andmebaasidest, andmebaasisüsteemidest ja nende kavandamisest

PostgreSQL ja Oracle pakuvad funktsioone, mis realiseerivad foneetilisi algoritme. Milleks neid vaja on? Mis nendest kasu on?

Foneetilisi algoritme saab kasutada näiteks suguvõsauuringutes, et otsida sarnase kõlaga perekonnanimega inimesi. Need inimesed võivad, aga ei...


Kas isiku rollide omamise registreerimise võiks realiseerida nii, et luua loendustüüp rollide nimedega ning kasutajate tabelis luua veerg, mille väärtuseks on seda loendustüüpi väärtuste massiiv?

See on võimalik, aga ma ei soovita. Soovitan rollide jaoks luua eraldi klassifikaatori tabeli ja luua eraldi tabeli rollide omamiste kohta.CREATE TYPE t_roll AS ENUM('juhataja','administraator','tavakasutaja');


Lõin PostgreSQL andmebaasis protseduuri (CREATE PROCEDURE lause). Seda MS Accessi rakendusest välja kutsudes saan veateateid nagu:
  • Error while preparing parameters.
  • ERROR: ... is a procedure; Error while preparing parameters.

Milles on viga ja mida selle parandamiseks ette võtta?

Protseduurid on PostgreSQLis väga uus asi (lisandusid PostgreSQL 11) ja vanemad draiveri versioonid neid ei toeta. Lahenduseks on asendada serveris protseduurid funktsioonidega või kasutada viimast draiveri versiooni.


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_...

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 tabeli...


PostgreSQL andmebaasi varukoopia tegemisel pgAdmini programmiga esineb mul viga:
pg_dump: server version: 17.0; pg_dump version: 16.5
pg_dump: aborting because of server version mismatch

Mida teha?

See viga võib esineda ka tulevastes versioonides. Üldine põhjus on selles, et kasutatav pgAdmini versioon ei vasta kõige uuemale PostgreSQLi versioonile. Tüüpiliselt tuleb PostgreSQList välja uus põhiversioon igal sügisel (tavaliselt septembri lõpus ...


Käivitan läbi psqli PostgreSQL andmebaasis CREATE TABLE lauseid. Saan ühe lause peale veateate:

ERROR: syntax error at or near "CONSTRAINT" LINE 29: SET CONSTRAINT FK_Isik_Riik FOREIGN KEY (isikukoodi_riik) RE...

Samas selles lauses ei ole SET CONSTRAINT fraasi. Milles on viga ja kuidas seda parandada?

Vea põhjus on CREATE TABLE lauses olevas tabeldusmärgis. See probleem esines kuni PostgreSQL 14 (kaasa arvatud). PostgreSQL 15 see probleem lahendati. Näiteks saan sellise veateate, kui käivitan lause tabeli C loomiseks (ko...


Üritan muuta Oracles tabeli struktuuri või tabelit kustutada, kuid saan veateate ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired.

Milles on viga ja kuidas seda lahendada?

Viga tuleb sellest, et üritate kustutada tabelit, milles olevaid andmeid mõni teine transaktsioon samal ajal muudab. Lisan vastusele seda illustreeriva pildi. Sessioonis 1 loodi tabel ja lisati sellesse rida. INSERT lausega algas uus transaktsioo...


Millist regulaaravaldist tuleks kasutada Oracles, et kontrollida andmebaasi tasemel kolmetähelisi riigi koode?

Märkus: Paraku ei toeta Oracle andmebaasimootor BOOLEAN tüüpi ja seetõttu tuleb järgnevas PL/SQL anonüümses plokis tulemuse väljastamiseks asendada tõeväärtus tekstilise väärtusega. DECLARE resu...


Kuidas testida, kas rakendusele vastavale kasutajale on antud õigused õigesti?

Muutke rakenduse konfiguratsioonis kasutajat, millena rakendus andmebaasisüsteemiga suhtleb. Selleks asendage enda (ülikasutaja õigustega) kasutajanimi/parool rakendusele vastava piiratud õigustega kasutaja (loodud CREATE USER lausega) kasutajanime n...


Kas olemasse tabelisse T ridade lisamiseks võib MS Accessis kasutada SELECT ... INTO T FROM ... lauset?

Ei! See oleks ränk viga. SELECT ... INTO T … põhjustab MS Accessis tabeli T kustutamise...