Vastus (01.11.2022 14:47): 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.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