在 CockroachDB 中应用主键约束 - 多个主键错误

问题描述 投票:0回答:2

我在 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 的表中查看主键? 和 如何将我想要的列设为主键?

constraints primary-key cockroachdb
2个回答
3
投票

目前CockroachDB存在表创建后无法修改主键的限制。如果您创建一个没有主键的表,则会在后台为您创建一个不可见的

rowid
列并设置为主键。

您必须使用

CREATE TABLE
表达式中设置的主键重新创建表。


1
投票

你现在就可以做到。您只需删除在事务中隐式

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

进行验证
© www.soinside.com 2019 - 2024. All rights reserved.