ANALYZE_CONSTRAINTS
在指定范围内分析和报告约束违规
您可以在执行 INSERT
、UPDATE
、MERGE
或 COPY
语句时启用自动强制执行主键约束、唯一键约束和检查约束。另外,您可以在发出这些语句后使用 ANALYZE_CONSTRAINTS
验证约束。参考约束强制执行了解更多信息。
ANALYZE_CONSTRAINTS
以 SELECT * FROM t1
持有表 t1
的锁定的相同方式执行锁定。有关其他信息,请参阅
LOCKS
。
这是元函数。您必须在顶级 SELECT 语句中调用元函数。
行为类型
易变语法
ANALYZE_CONSTRAINTS ('[[[database.]schema.]table ]' [, 'column[,...]'] )
参数
-
[database.]schema
数据库和架构。默认架构为
public
。如果指定一个数据库,它必须是当前数据库。-
表
- 标识要分析的表。如果忽略指定架构,Vertica 将使用当前架构搜索路径。如果设置为空字符串,Vertica 将分析当前架构中的所有表。
- 列
- table 中要分析的列。可以指定多个逗号分隔列。Vertica 将分析范围缩小到指定的列。如果忽略指定列,Vertica 将分析 table 中的所有列。
特权
-
架构:USAGE
-
表:SELECT
在加载进程中检测约束违规
Vertica 在运行查询(而不是加载数据)时检查约束违规。要在加载进程中检测违反约束,使用 COPY 语句的 NO COMMIT 选项。通过加载数据但不提交数据,可以使用 ANALYZE_CONSTRAINTS
函数对数据执行加载后检查。如果此函数发现违反约束,由于您尚未提交数据,因此可以回退加载。
如果 ANALYZE_CONSTRAINTS
发现冲突,比如当您在主键中插入一个重复值时,则可以使用以下函数更正错误。效果仅持续到会话结束为止:
重要
如果检查约束 SQL 表达式对给定行的评估结果为未知,因为表达式中的一列包含一个 null 值,行将传递约束条件。返回值
ANALYZE_CONSTRAINTS
返回一个结构集中的结果(参阅下表),其中列出造成违规的架构名称、表名称、列名称、约束名称、约束类型和列值。
如果结果集为空,则不存在违反约束;例如:
> SELECT ANALYZE_CONSTRAINTS ('public.product_dimension', 'product_key');
Schema Name | Table Name | Column Names | Constraint Name | Constraint Type | Column Values
-------------+------------+--------------+-----------------+-----------------+---------------
(0 rows)
下面的结果集显示主键冲突,以及导致冲突的值 ('10')
:
=> SELECT ANALYZE_CONSTRAINTS ('');
Schema Name | Table Name | Column Names | Constraint Name | Constraint Type | Column Values
-------------+------------+--------------+-----------------+-----------------+---------------
store t1 c1 pk_t1 PRIMARY ('10')
(1 row)
结果集列在下表中详细描述:
示例
请参阅检测约束违规。