YugabyteDB中COPY命令DISABLE_FK_CHECK选项的正确用法
DISABLE_FK_CHECK 选项使用说明
报错原因
当前使用的2.13.2.0-b0版本,未在COPY命令的WITH选项列表中实现DISABLE_FK_CHECK参数。所参考的预览版文档对应最新开发分支功能,与本地安装的旧版本能力不匹配,因此执行时报参数无法识别的错误。
对应版本的正确用法
2.15.0及以上预览版、2.18及以上稳定版
上述版本已原生支持该COPY选项,直接在WITH子句中传入即可,语法如下:\COPY xpctd_prtn_value FROM '/root/data.txt' WITH (FORMAT CSV, DELIMITER '|', DISABLE_FK_CHECK);该参数生效时会完全跳过导入流程中的外键约束校验,导入结束后不会自动触发补校验,需自行确认导入数据符合外键约束规则,避免出现数据一致性问题。
2.13.x等不支持该选项的旧版本
可通过会话级参数临时关闭外键校验,实现同等的导入性能提升效果,操作步骤如下:-- 导入前切换会话复制角色,跳过外键、触发器校验 SET session_replication_role = replica; -- 执行导入,无需追加DISABLE_FK_CHECK参数 \COPY xpctd_prtn_value FROM '/root/data.txt' WITH (FORMAT CSV, DELIMITER '|'); -- 导入完成后恢复默认校验规则 SET session_replication_role = DEFAULT;该方式同样不会在恢复设置后自动补做全量外键校验,需提前确认导入数据合法性。
补充注意事项
- 区分psql客户端
\COPY元命令与服务端COPY命令:\COPY读取的是客户端本地路径下的文件,服务端COPY读取的是数据库节点本地路径下的文件、需超级用户权限,两者对DISABLE_FK_CHECK参数的支持规则完全一致。 - 大表数据导入场景下,除跳过外键校验外,还可配合延后创建二级索引、临时关闭非必要触发器、调整批量写入大小的方式进一步提升导入效率。
内容的提问来源于stack exchange,提问作者Jim Knicely
相关产品推荐
相关产品推荐

