限制

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 可能会中止并报告错误。例如,读取头块失败时,可能发生此行为。

磁盘配额

表和架构可以设置磁盘配额。如果加载违反任一配额,操作将失败。有关详细信息,请参阅磁盘配额