У меня две таблицы: колода (id) и карта (колода, цвет, ценность)
Колода
имеет следующие ограничения:
и карта имеет следующие ограничения:
FOREIGN KEY (deck) REFERENCES deck(id)
PRIMARY KEY (deck, color, value)
Как мне вставить новую колоду?
Я пробовал это:
begin transaction;
INSERT INTO "public"."deck" ("id") VALUES (nextval('deck_id_seq'::regclass));
INSERT INTO "public"."card" ("deck", "color", "value") VALUES ('1', enum_first(null::Suit), enum_first(null::Symbol));
end transaction
(я должен был отредактировать fifty_two_cards_deck
, чтобы он был one_card_deck
для целей тестирования)
но я получил эту ошибку:
Ошибка SQL:
ОШИБКА: новый ряд для отношения "колода"
нарушает ограничение проверки
"Fifty_two_cards_deck"
В заявлении: начать транзакцию;
INSERT INTO "public". "Deck" ("id")
ЦЕННОСТИ
(NEXTVAL ( 'deck_id_seq' :: regclass));
INSERT INTO "public". "Card" ("колода",
"color", "value") VALUES ('1',
enum_first (нуль :: Suit),
enum_first (нуль :: Symbol));
конец транзакции
Как я могу решить эту проблему, не снимая ограничений?
РЕДАКТИРОВАТЬ: решение
спасибо Магнусу Хагандеру, у меня получилось так (после установки отложенного внешнего ключа):
begin transaction;
SET CONSTRAINTS ALL DEFERRED;
INSERT INTO "public"."deck-card" ("deck", "position", "color", "value") VALUES (1, 0, enum_first(null::suit), enum_first(null::Symbol));
INSERT INTO "public"."deck" ("id") VALUES (1);
end transaction