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, 01.06.2022 00:00 (muudeti 08.09.2024 12:48)
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]


Kas postitus oli kasulik? Hinda seda!

Keskmine hinne: Pole veel hinnanguid!


← Eelmine postitus PostgreSQL andmebaasi varukoopia tegemisel pgAdmini programmiga esineb mul viga: <br>pg_dump: server version: 17.0; pg_dump version: 16.5 <br>pg_dump: aborting because of server version mismatch <p>Mida teha? Järgmine postitus → Kas PostgreSQLis saab genereerida fraktaleid nagu demonstreerib <a target=_blank href='http://ylett.com/projects/sqlfun/'>see projekt</a> MS SQL Serveri põhjal?