强制执行的约束的投影

为了强制执行主键和唯一约束,Vertica 创建了特殊的约束强制执行投影,用于验证新数据和更新后的数据。如果您在空表上添加约束,Vertica 仅在向该表添加数据时才会为该表创建约束强制执行投影。如果您向填充有内容的表添加主键或唯一约束并启用强制执行,Vertica 会选择现有投影来强制执行约束(如果存在)。否则,Vertica 会为该约束创建投影。如果出现约束违规,Vertica 会回退语句以及它为约束创建的任何投影。

如果您删除已强制执行的主键或唯一约束,Vertica 会自动删除与该约束关联的投影。您还可以使用 DROP PROJECTION 显式删除约束投影。如果该语句省略了 CASCADE,Vertica 会发出一条警告,提示为已启用的约束删除此投影;否则,它会静默删除此投影。无论哪种情况,下次 Vertica 需要强制执行此约束时,它都会重新创建投影。根据锚表中的数据量,创建投影可能会产生巨大的开销。

您可以查询系统表 PROJECTIONS 的布尔列 IS_KEY_CONSTRAINT_PROJECTION 以获得特定于约束的投影。