更新表时插入PostgreSQL

时间:2018-09-25 11:22:05

标签: postgresql insert sql-update

我有一张大桌子,我开始对所有行进行更新查询:

UPDATE <table> SET column1 = column1 - interval '3 hours'

此查询运行了很长时间(18小时)。
因此,在运行此查询时,我需要在此表中插入新行。
会不会发生冲突?更新查询会尝试更新新行吗? (我不要)

我也尝试在此表中进行选择以检查已经更新了多少行。
而且似乎最少的行。

Postgres会在末尾全部更新,还是应该持续更新,我应该通过选择来查看更改?

如果我取消更新查询,是否应该更新某些行而不是某些行?
正确的话,postgres是通过增加id来按顺序更新它,还是随机的?

1 个答案:

答案 0 :(得分:0)

  1. PostgreSQL通常会按照物理顺序更新行,这对您来说是“随机”顺序(因为物理顺序可以随时更改)。

  2. UPDATE不会阻止并发的INSERT

  3. UPDATE仅处理启动时已提交的行,因此不会影响任何新添加的行。

  4. 在更新事务结束之前,修改后的行对于并发会话将不可见。

  5. 如果您中断UPDATE,则其所有效果都将被撤消。

所有这些(第一个除外)都是隔离级别为READ COMMITTED的数据库事务的属性;您可能需要阅读文档中的concurrency control