我在 CRDB 中创建了一个没有任何主键的表,并将我的数据填充到该表中。
现在表已创建并填充了数据,我想应用约束以使第一列作为主键。但我收到一个错误:
约束条件是:
ALTER TABLE “MyDB”.“SALES” ADD CONSTRAINT “SALES_PK” PRIMARY KEY (“S_ID”);
错误是:
pq: multiple primary keys for table “SALES” are not allowed.
我认为 CRDB 中有原因,如果没有提到 PRIMARY KEY,CRDB 会自动为名为:
rowid
的表分配一个 PRIMARY KEY。
如何在 CRDB 的表中查看主键? 和 如何将我想要的列设为主键?
目前CockroachDB存在表创建后无法修改主键的限制。如果您创建一个没有主键的表,则会在后台为您创建一个不可见的
rowid
列并设置为主键。
您必须使用
CREATE TABLE
表达式中设置的主键重新创建表。
你现在就可以做到。您只需删除在事务中隐式
rowid
唯一键上创建的旧约束即可。
在你的例子中
BEGIN;
ALTER TABLE “MyDB”.“SALES” DROP CONSTRAINT “SALES_PKEY”;
ALTER TABLE “MyDB”.“SALES” ADD CONSTRAINT “SALES_PK” PRIMARY KEY (“S_ID”);
COMMIT;
我相信
rowid
约束被命名为 [table_name]_pkey
,这就是为什么它在上面的例子中是 SALES_PKEY
。您可以通过运行 SHOW CONSTRAINTS FROM SALES
进行验证