在Postgres中,当我们尝试用相同的唯一键组合重新插入记录时,会抛出唯一键禁忌错误。
但是在雪花中,错误不被抛出,并且允许重复(即使在查询中添加强制关键字之后)
create table DUMMY( ONE integer autoincrement start 1 increment 1, TWO integer NOT NULL, THREE varchar(7) NOT NULL, FOUR varchar(7) NOT NULL )
ALTER TABLE DUMMY ADD CONSTRAINT UNIQUENESS UNIQUE(TWO, THREE) ENFORCED;DB输出:

发布于 2022-03-01 06:04:08
雪花自称为数据库。但事实并非如此。
https://docs.snowflake.com/en/sql-reference/constraints-overview.html
雪花支持定义和维护约束,但不强制它们,除非非空约束,这些约束总是强制的
发布于 2022-03-01 22:41:41
完全个人意见:
ADD CONSTRAINT UNIQUENESS UNIQUE(TWO, THREE) ENFORCED;是免费午餐。你告诉数据库,我要把东西放进你里面,每次我都要帮我做这些检查。
当您扩展到非常大的表时,这样的检查会降低性能,原因有两个。DB应该如何最优地执行强制执行。如果它做的同样的检查比它所需要的还要多呢?在其他数据库中,您可以关闭检查,并且经常这样做,以获得更大的转换操作的性能。
在哪里--就像在雪花一样--你可以/必须管理它。有些人认为这是一种诅咒,我认为这是一种祝福。你可以在“进入”的方式上取消你的数据,然后使用它。
DML的原因是它允许现有脚本“工作”。但是,如果现有进程依赖异常,则有其不利的一面。但是公平地说,如果您正在加载1B行,如何正确地处理3个dups。
有许多方法可以去dup您的数据,在我们的经验中,我们发现大量的数据类型,我们使用专用表去dup我们的输入数据基于数据形状的知识,以及重复发生的时间/地点的流程。
https://stackoverflow.com/questions/71303658
复制相似问题