gpt4 book ai didi

postgresql - 复制 csv postgres 忽略违反约束的行

转载 作者:行者123 更新时间:2023-11-29 11:34:02 26 4
gpt4 key购买 nike

我有一个包含约 300,000 行的 .csv 文件,其中一些违反了我在 postgres 数据库中设置的某些约束。有没有办法将我的 .csv 文件复制到数据库中,并让 postgres 过滤掉违反约束的行?我不希望这些行出现在数据库中。

如果不行,有没有其他办法解决这个问题?

我现在正在做的是

COPY blocksequences from '/tmp/blocksequences.csv CSV HEADER;

我明白了

'ERROR:  new row for relation "blocksequences" violates check constraint "blocksequences_partid3_check"
DETAIL: Failing row contains (M001-M049-S186, M001, null, M049, S186).
CONTEXT: COPY blocksequences, line 680: "M001-M049-S186,M001,,M049,S186"

错误原因:不允许在包含 M049 的列中输入该字符串。许多其他行都有这样的违规行为。

我阅读了一些关于 exception when check violation --do nothing 我走在正确的轨道上吗?似乎这只是一个 mysql 问题

最佳答案

通常这是通过这种方式完成的:

  • 创建一个与目标表结构相同但没有约束的临时表,
  • COPY命令复制数据到临时表,
  • 将满足约束条件的行从临时表复制到目标表,使用 INSERT 命令并根据表约束在 WHERE 子句中设置条件,
  • 删除临时表。

当处理非常大的 CSV 文件或非常有限的服务器资源时,使用 extension file_fdw而不是临时表。这是一种更有效的方法,但它需要服务器访问 CSV 文件(同时可以通过网络复制到临时表)。

Postgres 12 中,您可以在 COPY FROM. 中使用 WHERE 子句

关于postgresql - 复制 csv postgres 忽略违反约束的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49948373/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com