给定表A列(A1,A2,A3 ...)和表B列(B1,B2,A1),其中A1是表A中字段A1的外键。
表A包含B引用的记录。
表格按日期字段分区,该字段对表A和B中的相关记录具有相同的值。
如果删除的分区包含B引用的A中的行,为什么我没有得到异常?我本来期望某种错误表明记录正在某处被引用。
或者我错过了什么 - 它应该警告我吗?
答案 0 :(得分:1)
在版本8之前,Vertica无法在dml操作期间强制执行主键,唯一键或外键约束。您必须使用analyze_constraints()
在事后检测违规。
即便版本8在这方面也有局限性。首先,您必须确保启用了检查。其次,这仅适用于主键和唯一键。
为了强制执行FK(在任一版本上),您必须创建一个prejoin投影。但是,即使这样做也可能不是您的答案,因为当存在预加入投影时您不能删除分区(您将删除预加入投影,删除分区,重新创建预加入投影)。
使用prejoin投影还有一些其他限制。
我还提到Vertica不是OLTP,它的重点是快速加载和快速查询(和压缩)。但我理解你的痛苦,因为偶尔我需要这样的功能。
希望这有帮助。