Postgres数据库
我正在尝试找到一种更快的方法来在表中创建一个新列,这是表主键列的副本,所以如果我在名为students
的表中有以下列:
student_id Integer Auto-Increment -- Primary key
name varchar
然后我想创建一个名为old_student_id
的新列,它与student_id
具有相同的值。
为此,我创建了列并执行以下更新语句
update student set old_student_id=student_id
哪个有效,但在我最大的桌子上花了一个多小时,我觉得我应该能够使用某种替代方法将其缩短到几分钟,我只是不知道是什么。
所以我想在一天结束时看起来像这样:
+------------+-----+---------------+
| student_id | name| old_student_id|
+------------+-----+---------------+
| 1 | bob | 1 |
+------------+-----+---------------+
| 2 | tod | 2 |
+------------+-----+---------------+
| 3 | joe | 3 |
+------------+-----+---------------+
| 4 | tim | 4 |
+------------+-----+---------------+
为了在进行更新查询之前加快速度,我将所有FK和Indices放在桌面上,然后在完成后重新应用它们。此外,我在AWS RDS上,因此我设置了一个param组,该组具有synchronized_commits=false
,关闭备份,并在此更新期间增加了工作内存。
对于上下文,这实际上发生在数据库中的每个表中,跨三个数据库。旧的ID用作引用这些ID的几个外部系统的参考,因此我需要跟踪它们以便更新这些系统。我有一个8小时的停机时间窗口,目前合并数据库需要大约3个小时,并且花费了整整一个小时来创建这些ID。