我正在尝试优化表的结构。为此,我已将列以最佳顺序排列,然后运行此查询(已简化):
INSERT INTO table_new ("id", "some_field", "some_other_field") SELECT "id", "some_field", "some_other_field" FROM table_current;
然后我简单地重命名表并添加所有相同的索引和外键。
ALTER TABLE "table_current" RENAME TO "table_old";
ALTER TABLE "table_new" RENAME TO "table_current";
ALTER TABLE "table_current" ADD PRIMARY KEY ("id") NOT DEFERRABLE INITIALLY IMMEDIATE;
这在过去非常有效,但在这种特殊情况下,还有很多其他表在该表上具有级联外键。
因此,如果我重新创建并重命名,那么所有其他表仍会引用table_old
它们的外键而不是新的table_current
.
我如何进行这样的表迁移而不必在每个其他表上重新创建外键?
没有简单的方法来解决这个问题。当您删除其他事物正在引用的列时,例如视图或外键,您必须手动通知架构中对该列具有依赖性的所有区域。
据我所知,没有捷径可走。没有人真正养成重新排序表格的习惯。大多数请求都是出于美观原因,但是如果您确实出于正当理由(例如餐桌包装)这样做,那么我祝您好运。
一段时间以来,它一直是一个功能请求,而且经常出现。