私は一度にいくつかのカラムを追加したり削除したりする必要のあるテスト環境で使用されているpostgresデータベースにテーブルを持っています。問題は、postgresに最大1600の列があり、この数には削除された列が含まれていることです。私のテーブルには決して1600個の `ドロップされていない 'カラムはありませんが、時間がたつにつれて1600以上のドロップで蓄積されます。ドロップされたカラムのpostgresの知識をクリアする
私はVACUUM
とVACUUM FULL
を使用して試してみた、と私は、それ自身、すべての列をスキャンして、ドロップされた列のメモリをクリーンアップするためにはpostgresを引き起こすタイプ(ALTER TABLE table ALTER COLUMN anycol TYPE anytype
)が、のどれも既存の列を作り直す試してみましたこれらはpostgresの `` column number ''をリセットします。
これはテーブル全体をコピーすることで解決できますが、それ自体の問題があり、別の問題です。
postgresは列が削除されたことを忘れてしまいます。
私は、postgresがこのようなアプリケーション用に設計されていないことを知っていますが、私たちがなぜこのように実装するのかについては分かりません。使用する別のツールがある場合は、それについて聞きたいと思うかもしれませんが、まだ解決策を探していたいと思います。
あなたはテーブル上で 'VACUUM'を試したと言いました。 'VACUUM FULL'はどうですか?あるいは、 'ALTER TABLE table ALTER COLUMN anycol TYPE anytype;'は、既に持っているのと同じ型に列を変更します。 –
すでに分かっているように、少なくとも2つの方法があります1):CREATE TABLE new AS select * FROM the_table;物事の名前を変更する。それ以外のものはpg_dump-t thetableです。テーブルをドロップします。 pg_dumpの結果からテーブルを作り直してください。どちらの場合も、FK制約を再構築する必要があります(2番目のケースでは少し簡単です)。 – joop