Vertica 主键异常行为
Vertica Primary Key Strange behavior
我在vertica 7.1.2中写了这段简单的代码
select reenable_duplicate_key_error();
create table Person(id int PRIMARY KEY, firstname varchar(20));
insert into Person select 1, 'test1' union all select 1, 'test2' union all select 1, 'test3';
现在如果我做一个
select * from Person;
我明白了
id | firstname
----+-----------
1 | test1
1 | test2
1 | test3
(3 rows)
所以看起来将键标记为主键没有效果
这是预期的记录行为。 Vertica 不会在加载时强制执行唯一性(想象一下尝试摄取 500GB 并且由于 PK 违规而不得不回滚)。您可以在提交或升级到 7.2 之前使用 analyze_constraints,您可以在其中启用 PK 的强制执行。使用密钥实现参照完整性仍然很重要。
有关强制加载唯一性的其他方法,请参阅 my blog post。
更新: 从 7.2 开始,Vertica 可以自动实施主键和唯一键约束。有关详细信息,请参阅 documentation。
我在vertica 7.1.2中写了这段简单的代码
select reenable_duplicate_key_error();
create table Person(id int PRIMARY KEY, firstname varchar(20));
insert into Person select 1, 'test1' union all select 1, 'test2' union all select 1, 'test3';
现在如果我做一个
select * from Person;
我明白了
id | firstname
----+-----------
1 | test1
1 | test2
1 | test3
(3 rows)
所以看起来将键标记为主键没有效果
这是预期的记录行为。 Vertica 不会在加载时强制执行唯一性(想象一下尝试摄取 500GB 并且由于 PK 违规而不得不回滚)。您可以在提交或升级到 7.2 之前使用 analyze_constraints,您可以在其中启用 PK 的强制执行。使用密钥实现参照完整性仍然很重要。
有关强制加载唯一性的其他方法,请参阅 my blog post。
更新: 从 7.2 开始,Vertica 可以自动实施主键和唯一键约束。有关详细信息,请参阅 documentation。