我有一个正常工作的程序,如下所示:
这已经工作了好几个月,每天大约插入一千万个新行。由于表很大,因此已经按天对表进行了分区并进行了适当命名。 TABLE_A_20180807
和TABLE_B_20180807
等...
由于疏忽,我设法创建了一个为期数周的TABLE_A分区,而没有适当的触发器,因此TABLE_B中没有相应的记录。
要重新处理现有数据,我采用了以下方法:
使用以下查询,使用触发器将原始数据从TABLE_A的分离版本中复制到正确的版本中。...
INSERT INTO TABLE_A (field1, field2)
SELECT field1, field2 FROM TABLE_A_20180807_BCK;
这应该可以,但是到目前为止(12小时)它没有返回任何结果。
我有两个问题:
我正在Windows上使用Postgres 10。所有其他会话均事先断开连接,我已经运行了一些随机查询,声称可以确定锁定问题,但是它们似乎表明没有死锁,请单击here进行查询。我已经检查了TABLE_B,并且没有迹象表明它会变大,但是我认为在整个交易完成之前,任何新行都将不可见?
根据评论进行更新: 我很确定触发器的速度不是问题,在正常情况下,记录的加载速度为每毫秒1条记录或每秒1000条记录。那应该等于每15分钟100万条记录,因此我的1000万行表应该在大约3个小时内重新加载。
好吧-这个过程终于完成了,所以我想它毕竟没有挂起。传输以大约每秒100条记录或每条记录10ms的速度进行。我想现在的问题是,为什么每个记录从另一张表转移所需的时间比从外部源加载所需的时间长10倍?