Frage

Ich kann den Syntaxfehler versteht einen zusammengesetzten Schlüssel zu schaffen. Es kann ein logischer Fehler, weil ich viele Sorten getestet haben.

Wie erstellen Sie zusammengesetzte Schlüssel in Postgres?

CREATE TABLE tags
     (
              (question_id, tag_id) NOT NULL,
              question_id INTEGER NOT NULL,
              tag_id SERIAL NOT NULL,
              tag1 VARCHAR(20),
              tag2 VARCHAR(20),
              tag3 VARCHAR(20),
              PRIMARY KEY(question_id, tag_id),
              CONSTRAINT no_duplicate_tag UNIQUE (question_id, tag_id)
     );
    ERROR:  syntax error at or near "("
    LINE 3:               (question_id, tag_id) NOT NULL,
                          ^
War es hilfreich?

Lösung

Ihre Verbindung PRIMARY KEY Spezifikation bereits tut, was Sie wollen. Lassen Sie die Zeile, die Ihnen einen Syntaxfehler, und lassen Sie den redundanten CONSTRAINT (bereits angedeutet) sind zu geben, auch:

 CREATE TABLE tags
      (
               question_id INTEGER NOT NULL,
               tag_id SERIAL NOT NULL,
               tag1 VARCHAR(20),
               tag2 VARCHAR(20),
               tag3 VARCHAR(20),
               PRIMARY KEY(question_id, tag_id)
      );

NOTICE:  CREATE TABLE will create implicit sequence "tags_tag_id_seq" for serial column "tags.tag_id"
    NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "tags_pkey" for table "tags"
    CREATE TABLE
    pg=> \d tags
                                         Table "public.tags"
       Column    |         Type          |                       Modifiers       
    -------------+-----------------------+-------------------------------------------------------
     question_id | integer               | not null
     tag_id      | integer               | not null default nextval('tags_tag_id_seq'::regclass)
     tag1        | character varying(20) |
     tag2        | character varying(20) |
     tag3        | character varying(20) |
    Indexes:
        "tags_pkey" PRIMARY KEY, btree (question_id, tag_id)

Andere Tipps

Der Fehler, den Sie bekommen ist in Zeile 3 das heißt, es ist nicht in

CONSTRAINT no_duplicate_tag UNIQUE (question_id, tag_id)

aber früher:

CREATE TABLE tags
     (
              (question_id, tag_id) NOT NULL,

Die korrekte Tabellendefinition ist wie Pilcrow zeigte.

Und wenn Sie auf tag1 einzigartig hinzufügen möchten, tag2, tag3 (was sehr verdächtig klingt), dann ist die Syntax:

CREATE TABLE tags (
    question_id INTEGER NOT NULL,
    tag_id SERIAL NOT NULL,
    tag1 VARCHAR(20),
    tag2 VARCHAR(20),
    tag3 VARCHAR(20),
    PRIMARY KEY(question_id, tag_id),
    UNIQUE (tag1, tag2, tag3)
);

oder, wenn Sie die Einschränkung nach Ihrem Wunsch benannt haben:

CREATE TABLE tags (
    question_id INTEGER NOT NULL,
    tag_id SERIAL NOT NULL,
    tag1 VARCHAR(20),
    tag2 VARCHAR(20),
    tag3 VARCHAR(20),
    PRIMARY KEY(question_id, tag_id),
    CONSTRAINT some_name UNIQUE (tag1, tag2, tag3)
);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top