Подскажите пожалуйста, зачем используется DEFERRABLE INITIALLY DEFERRED при создании таблицы модели? Вот такой результат я получил:
BEGIN;
--
-- Create model Post
--
CREATE TABLE "blog_post" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "title" varchar(250) NOT NULL, "slug" varchar(250) NOT NULL, "b
ody" text NOT NULL, "publish" datetime NOT NULL, "created" datetime NOT NULL, "updated" datetime NOT NULL, "status" varchar(10) NOT NULL,
"author_id" integer NOT NULL REFERENCES "auth_user" ("id") DEFERRABLE INITIALLY DEFERRED);
CREATE INDEX "blog_post_slug_b95473f2" ON "blog_post" ("slug");
CREATE INDEX "blog_post_author_id_dd7a8485" ON "blog_post" ("author_id");
COMMIT;
Насколько я понял, это отложенная проверка. Это означает, что если я к примеру во время INSERT буду ссылаться на несуществующего юзера, я не должен получить ошибку. Ошибка произойдет только во время коммита. Потом, когда я добавлю этого юзера, я смогу закомитить. Вот что говорит документация:
Ограничения IMMEDIATE проверяются в конце каждого оператора, а ограничения DEFERRED откладываются до фиксации транзакции. Режим IMMEDIATE или DEFERRED задаётся для каждого ограничения независимо.
Попробовал добавить запись в таблицу с несуществующим юзером с deferred и без него. Получаю ошибку во время INSERT в обеих случаях. Почему так? Приведите пожалуйста пример, где видны отличия работы с deferred и без него.