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