让我在这个问题的前言中指出,我在DBA方面的经验仅限于大学本科的入门课程,而且我刚刚开始学习PostgreSQL。
我想通过编程方式将数据从非常大(~4GB)的平面CSV (我知道,不是最好的格式,但这是我必须使用的格式)定期地导入到PostgreSQL数据库中。我相信我可以用COPY FROM
来完成这个任务。当遇到与现有记录匹配或冲突的CSV行时会发生什么?它是更新记录,忽略它,还是抛出错误?这种行为可以改变吗?
文献资料部分地指出:
复制将调用目标表上的任何触发器和检查约束。然而,它不会调用规则。
我对这一声明的解释是,这一声明将把CSV条目视为新记录,而不是更新现有记录,这反过来将违反可能放在列上的约束。这是正确的吗?如果是这样的话,似乎我唯一的行动就是在每次导入数据之前在表上发出DELETE
。我觉得这是非常低效的。
我正在使用的数据集的一个示例可以找到这里。我想从这个高度非规范化的来源导入数据并使其正常化.正如您所看到的,可能存在的每个相关天线都会复制每个许可证记录。
发布于 2012-05-13 16:06:10
COPY FROM
不会破坏数据库的完整性。
当约束失败时,会抛出一个错误,并且不会复制任何数据(该数据将被回滚)。
这种行为是不可改变的。您可以在编程语言中使用脚本来帮助您复制。
https://dba.stackexchange.com/questions/17787
复制相似问题