我有一张大桌子,我开始对所有行进行更新查询:
UPDATE <table> SET column1 = column1 - interval '3 hours'
此查询运行了很长时间(18小时)。
因此,在运行此查询时,我需要在此表中插入新行。
会不会发生冲突?更新查询会尝试更新新行吗? (我不要)
我也尝试在此表中进行选择以检查已经更新了多少行。
而且似乎最少的行。
Postgres会在末尾全部更新,还是应该持续更新,我应该通过选择来查看更改?
如果我取消更新查询,是否应该更新某些行而不是某些行?
正确的话,postgres是通过增加id来按顺序更新它,还是随机的?
答案 0 :(得分:0)
PostgreSQL通常会按照物理顺序更新行,这对您来说是“随机”顺序(因为物理顺序可以随时更改)。
UPDATE
不会阻止并发的INSERT
。
UPDATE
仅处理启动时已提交的行,因此不会影响任何新添加的行。
在更新事务结束之前,修改后的行对于并发会话将不可见。
如果您中断UPDATE
,则其所有效果都将被撤消。
所有这些(第一个除外)都是隔离级别为READ COMMITTED
的数据库事务的属性;您可能需要阅读文档中的concurrency control。