限制
COPY 具有以下限制:
无效数据
COPY 认为以下数据无效:
-
缺失列(输入行的列数少于接收表的列数)。
-
多余列(输入行的列数多于接收表的列数)。
-
INTEGER 或 DATE/TIME 数据类型的空列。对于这些类型中的任何一种,如果某列是空的,则
COPY
将不会使用 CREATE TABLE 命令定义的默认值。但是,如果您在COPY
语句中未提供列选项,则将使用默认值。 -
某个数据类型的表示不正确。例如,尝试将非数字值加载到 INTEGER 列的操作是无效的。
约束违规
如果在目标表中启用了主键、唯一键或检查约束以自动强制实施,Vertica 会在您加载新数据时强制实施这些约束。如果发生违规,Vertica 会回滚操作并返回错误。
空行处理
若 COPY
在加载数据时遇到空行,则既不会插入也不会拒绝该行,但 COPY
将递增行记录编号。评估被拒绝的记录时,请考虑此行为。如果您要返回被拒绝记录的列表,而 COPY
在加载数据时遇到空行,则被拒绝记录的位置将不会递增 1,如以下示例中所示。
该示例首先将值加载到将第一列定义为 INT 的表中。请注意第 3、4 和 8 行中的错误:
=> \! cat -n /home/dbadmin/test.txt
1 1|A|2
2 2|B|4
3 A|D|7
4 A|E|7
5
6
7 6|A|3
8 B|A|3
空行(5 和 6)会将错误报告转移到第 8 行:
=> SELECT row_number, rejected_data, rejected_reason FROM test_bad;
row_number | rejected_data | rejected_reason
------------+---------------+----------------------------------------------
3 | A|D|7 | Invalid integer format 'A' for column 1 (c1)
4 | A|E|7 | Invalid integer format 'A' for column 1 (c1)
6 | B|A|3 | Invalid integer format 'B' for column 1 (c1)
(3 rows)
压缩文件错误
加载压缩文件时,如果文件似乎已损坏,则 COPY
可能会中止并报告错误。例如,读取头块失败时,可能发生此行为。
磁盘配额
表和架构可以设置磁盘配额。如果加载违反任一配额,操作将失败。有关详细信息,请参阅磁盘配额。