ディスク上のサイズを 2 倍にせずに、非 null 型の列を Postgresql テーブルに追加する方法はありますか? たとえば、いくつかの列が定義されたテーブルがあり、列を追加したい場合は、次のようにします。
alter table my_table add new_column int
update table my_table set new_column = 0
alter table my_table alter column new_column set not null
これにより、Postgresql の動作により、テーブルに割り当てられるスペースが事実上 2 倍になります。更新により、このトランザクションが終了し、vacuum がジョブを実行した後に再利用するようにマークされる新しいタプルが作成されます。テーブルのサイズが大きい (つまり、数百万行) が、非常にゆっくりと成長するか、サイズがほぼ一定である場合、それらの行は再利用されず、「完全なバキューム」または完全なデータベースのバックアップと復元のみがディスク上のスペースを再利用します。デフォルト値を持つ列を自動的に追加する方法はありますが、この動作はありませんか? たとえば、テーブルをロックして更新を行う方法があれば、この場合 MVCC は必要ありません。