Moin!
Ich bin noch relativ neu bei PostgreSQL. Ich erstelle gerade die Datenbanken für ein kleines Hobbyprojekt. Ich möchte foreign/secondary keys benutzen aber irgendwie mache ich alles falsch. Ich habe schon x Schreibweisen versucht aber es gibt immer den selben Fehler:
Syntaxgehler bei >>user<<
ZEILE 1: ...ONSTRAINT fk_user FOREIGN KEY(user_id) REFERENCES user(user_...
Der Table ‘user’ ist bereits angelegt und enthält auch den Primary Key ‘user_id’. Ich verstehe einfach nicht was ich falsch mache. Mein Query:
CREATE TABLE "ticket" (
ticket_id SERIAL,
user_id SERIAL,
titel VARCHAR(200),
description TEXT,
worker_id SERIAL,
type VARCHAR(50),
rank INT,
status VARCHAR(50),
created DATE,
closed DATE,
PRIMARY KEY (ticket_id),
CONSTRAINT fk_user FOREIGN KEY(user_id) REFERENCES user(user_id),
CONSTRAINT fk_worker FOREIGN KEY(worker_id) REFERENCES user(user_id)
);
Das Problem waren die Anführungszeichen. Die korrekte Syntax ist anscheinend:
CREATE TABLE "ticket" (
ticket_id SERIAL,
user_id SERIAL,
titel VARCHAR(200),
description TEXT,
worker_id SERIAL,
type VARCHAR(50),
rank INT,
status VARCHAR(50),
created DATE,
closed DATE,
PRIMARY KEY (ticket_id),
FOREIGN KEY(user_id) REFERENCES "user"(user_id),
FOREIGN KEY(worker_id) REFERENCES "user"(user_id)
);
Warum auch immer ich Anführungszeichen setzen muss. In der Doku steht es ohne drinne.
castorp
22. Oktober 2022 um 16:18
3
ich sehe exakt NULL Sinn darin, eine Spalte als Datentyp SERIAL und dann als FOREIGN KEY zu definieren.
[code]
CREATE TABLE "ticket" (
ticket_id SERIAL,
user_id SERIAL,
...
CONSTRAINT fk_user FOREIGN KEY(user_id) REFERENCES user(user_id),
Da hast du Recht. Da habe ich überhaupt nicht mehr dran gedacht. Habe halt die ganze Zeit nur diesen verflixten Fehler gesucht ^^ Hab ich gerade zu INT geändert. Danke fürs draufhinweisen!
castorp
22. Oktober 2022 um 18:34
6
Am besten gewöhnst Du Dir die Verwendung von serial ganz ab, und nimmst statt dessen identity Spalten
system
Geschlossen,
21. Dezember 2022 um 18:35
7
Dieses Thema wurde automatisch 60 Tage nach der letzten Antwort geschlossen. Es sind keine neuen Antworten mehr erlaubt.