【发布时间】:2014-12-18 14:42:52
【问题描述】:
我正在尝试将 Postgres table1 复制到另一个 table2,同时更改其中一列的值。为了加快传输速度,我运行了 10 个不同的进程,每个进程在 table1 中都有不同的偏移量,例如,1st process:SELECT * FROM table OFFSET offset1 LIMIT x; 然后复制到table2,2nd process:SELECT * FROM table OFFSET offset2 LIMIT x 然后复制到table2 .
但即使我的table1 中没有重复行,我的table2 中确实有重复行(x 小于offset2-offset1)。是否有可能相同的offset 值没有指向跨不同进程的表中的同一行?如果是,那么在修改 Postgres 中的列时复制表的更好方法是什么?谢谢!
【问题讨论】:
-
近乎重复:PostgreSQL - repeating rows from LIMIT OFFSET。另一个问题的提问者使用
order by,但使用的是非唯一表达式。顺便说一句,这在丹尼斯的回答中是缺失的。仅使用ORDER BY是不够的,它需要应用于一个字段或字段组合或在所有行中唯一的表达式。 -
另外,你应该计时
CREATE TABLE table2 AS SELECT...,如果这些会话相互竞争以获得对磁盘的访问权限,它可能比 10 个不同的进程更快,除非你的 postgres 数据分区分布在一个大的物理驱动器的数量
标签: postgresql