我想从CSV文件中加载很多行 该文件包含这些数据" article _name,article_time,start_time,end_time"
桌子上有一个禁令:对于相同的文章名称,如果新的article_time属于同一篇文章的现有范围[start_time,end_time],我就不会插入新行。
即:如果存在[start_time_x,end_time_x],则不要插入行y,其中time_article_y在范围[start_time_x,end_time_x]内,其中article_ name_ y = article_ name_ x
有没有办法只在包含相同article_name的行上创建锁? (而不是锁定整个桌子?)
您能否帮助解决这个问题,使其具有平行性和/或更高的时间效率?
很多感谢的人
答案 0 :(得分:0)
您的排除约束和INSERT ... ON CONFLICT
的想法很好。
您可以按如下方式提高速度:
在一次交易中完成所有工作。
像Vao Tsun建议的那样,可能先将数据COPY
放入临时表中,然后使用单个SQL语句完成所有操作。
从修改数据的表中删除除排除约束之外的所有索引,并在完成后重新创建它们。
在加载数据时,通过禁用autovacuum并提升max_wal_size
(或checkpoint_segments
旧版PostgreSQL版本)来加快插入速度。