Kodulehed
[379] - Andmebaasid II (ITI0207) (sügis 2020)
pinned Kiirvalik Kõige olulisemate tegevuste kiirvalik
Üldist
Materjalid Materjalide kataloogid
Vaated Erinevad väljavõtted kataloogides olevatest materjalidest
Isiklik Info ainult Sulle - teised kasutajad seda ei näe
Abi Võimalus küsida õppejõult abi (nagu foorum, kus saab küsida küsimusi ja kommenteerida vastuseid)
Mitmesugust
Avalikud küsimused ja vastused:
Teemad:

                         
Anonüümne:
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?

Vastus: Vea põhjus on CREATE TABLE lauses olevas tabeldusmärgis.

Näiteks saan sellise veateate, kui käivitan lause

1.CREATE TABLE C(c_id INTEGER PRIMARY KEY,
2.    a_id INTEGER NOT NULL,
3.    b_id INTEGER NOT NULL,
4.    CONSTRAINT ak_c UNIQUE (a_id, b_id),
5.    CONSTRAINT fk_c_a FOREIGN KEY (a_id) REFERENCES A(a_id) ON DELETE No Action ON UPDATE Cascade,
6.    CONSTRAINT fk_c_b FOREIGN KEY (b_id) REFERENCES B(b_id) ON DELETE No Action ON UPDATE Cascade
7.);

Veateade: ERROR: syntax error at or near "CONSTRAINT"
LINE 6: SET CONSTRAINT fk_c_b FOREIGN KEY (b_id) REFERENCES B(b_id) ...

Viga tekib sellest, et psql ei saa mõnikord tabeldusmärkidega hakkama. Reas nr 5 on võtmesõna UPDATE. Sellele järgneb rea nr 6 alguses tabeldusmärk. See paneb psqli arvama, et UPDATE on eraldi lause.

Kuidas seda probleemi lahendada?

  • Kustutage skriptist enne käivitamist tabeldusmärgid (tekstiredaktoris Search and Replace funktsioon).
  • Käivitage skripti pgAdminis (seal seda probleemi ei ole).
  • Panete (näiteks WinSCP programmi abil) skriptifaili apex.ttu.ee serveris enda kodukataloogi (/home/kasutajanimi - satute sinna sisselogimisel). Seejärel käivitate shelli promptist selle skripti üldise käsuga:

    psql -f skriptifaili nimi andmebaasi nimi, kus soovite skripti käivitada

    Näiteks järgmine käsk käivitab failis DDL_PostgreSQL.sql olevad laused andmebaasis proov.

    psql -f DDL_PostgreSQL.sql proov




1.
Erki Eessaar:
2.
Erki Eessaar:
3.
Anonüümne:
4.
Erki Eessaar:
5.
Erki Eessaar:
6.
Anonüümne:
7.
Anonüümne:
8.
Anonüümne:
9.
Anonüümne:
10.
Erki Eessaar:
11.
Anonüümne:
12.
Anonüümne:
13.
Anonüümne:
14.
Anonüümne:
15.
Anonüümne:
16.
Erki Eessaar:
17.
Anonüümne:
18.
Erki Eessaar: