Мне нужно создать миграцию для уже существующей таблицы, чтобы ее внешний ключ имел ограничение UNIQUE
. Как мне это сделать?
Из примеров, которые я нашел в документации, в основном это делается при создании таблицы. Проблема в том, что мне нужно добавить это в столбец, который уже существует и уже задан как внешний ключ. Вот как выглядит таблица при ее создании:
CREATE TABLE IF NOT EXISTS "myTable" (
"_id" SERIAL NOT NULL,
"myForeignKeyId" INTEGER NOT NULL,
"name" VARCHAR(255) NOT NULL,
CONSTRAINT "pk_myTable" PRIMARY KEY ("_id"),
CONSTRAINT "fk_myTable_myForeignKeyId" FOREIGN KEY ("myForeignKeyId") REFERENCES "myOtherTable" ("_id")
);
Что я хочу сделать, так это сделать миграцию уникальной myForeignKeyId
. Как мне это сделать?
Я попытался сделать следующее:
CREATE UNIQUE INDEX CONCURRENTLY "myTable_myForeignKeyId"
ON province ("myForeignKeyId");
ALTER TABLE IF EXISTS "myTable"
ADD CONSTRAINT "myForeignKeyId"
UNIQUE USING INDEX "myTable_myForeignKeyId";
Во-первых, когда я пытаюсь сделать это в процессе миграции, я получаю сообщение об ошибке:
CREATE INDEX CONCURRENTLY не может быть запущен внутри блока транзакции
Так что эту часть невозможно выполнить, но даже если просто сделать это через SQL, вторая часть также не будет работать, поскольку она требует myForeignKeyId
уже существует. Даже если я добавлю ALTER COLUMN myForeignKeyId
, он просто скажет, что в этой строке есть ошибка.
Кажется, это должна быть достаточно простая операция, как я могу это сделать?