【发布时间】:2020-01-14 18:46:14
【问题描述】:
我需要为已经存在的表创建迁移,以使其外键具有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,它也只是说该行有错误。
这似乎应该是一个足够简单的操作,我该怎么做?
【问题讨论】:
标签: postgresql database-migration unique-constraint