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?

Postitas Erki Eessaar
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 (kogu katsetuse skript on küsimusele lisatud failis).

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 apex2.taltech.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


Tabulatsioonimärgid SQL koodis - näide [1 KB]

Hinda postitust:

Keskmine hinne : Pole veel hinnanguid!