Просто интересно, если у меня есть эта таблица:ключ иностранных паросочетание в PostgreSQL
CREATE TABLE "post" (
"id" SERIAL,
"revision" INTEGER NOT NULL DEFAULT 0,
"summary" CHARACTER VARYING NOT NULL,
"description" TEXT NOT NULL,
"user_id" INTEGER NOT NULL
REFERENCES "user" ("id") MATCH FULL
ON UPDATE CASCADE
ON DELETE RESTRICT,
"post_type_id" INTEGER NOT NULL
REFERENCES "post_type" ("id") MATCH FULL
ON UPDATE CASCADE
ON DELETE RESTRICT,
"ctime" TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
PRIMARY KEY("id", "revision")
);
хранить сообщения, и эту таблицу:
CREATE TABLE "post_state" (
"post_id" INTEGER NOT NULL,
"assembly_seat_id" INTEGER NOT NULL
REFERENCES "assembly_seat" ("id") MATCH FULL
ON UPDATE CASCADE
ON DELETE RESTRICT,
PRIMARY KEY("post_id")
);
, и я хочу, чтобы мой post_id
поле, чтобы указать на post(id)
, как мне это сделать? Я попытался следующей фразой:
"post_id" INTEGER NOT NULL UNIQUE,
REFERENCES "post" ("id") MATCH SIMPLE
ON UPDATE RESTRICT
ON DELETE RESTRICT,
, но я получаю эту ошибку:
ERROR: there is no unique constraint matching given keys for referenced table "post"
Значения post_state(asembly_seat_id)
не изменяются в этом случае.
Вы можете создать только внешний ключ, который ссылается на одну строку в другой таблице. Поскольку 'post_id' не уникален (единственная комбинация post_id/revision уникальна), вы не можете ссылаться на нее. –
ОН, спасибо за ответ, глупо меня * facepalm * – Jeffrey04
@JoachimIsaksson: Вас может заинтересовать мой ответ, который противоречит вашим комментариям по частям. –