web-dev-qa-db-ja.com

Postgres 11の主キーインデックスにINCLUDE用語を追加

Postgres 11を使用していて、大きなテーブル(約7億5000万行)の主キーをサポートするインデックスを変更したいと考えています。主キーはbigintidであり、INCLUDE用語を使用して追加の列を含めたいと思います。これは、テーブルの書き換えなしで発生する必要があります(つまり、新しい列や変更された列はありません)。

現在のPRIMARY KEY制約を削除することは、他の多くのテーブルがターゲットテーブルを参照するため、不便です。これらすべてのテーブルのFOREIGN KEY制約を削除してから、PRIMARY KEY制約を削除し、新しいインデックスを使用して再作成してから、FOREIGN KEY制約を再作成することができると思います。それを行うより良い方法はありますか?

4
tomka

カタログをいじらないで(これは称賛に値しません)、私が考えることができる唯一のオプションは、しばらくの間外部キーなしで行うことを要求するでしょう:

適切なUNIQUE句を含むテーブルに2番目のINCLUDEインデックスを定義できます。

CREATE INDEXCONCURRENTLY句を使用する場合、混乱を招くことはありません。

次に、DROP INDEX ... CASCADEを使用して、元の主キー制約とすべての依存する外部キーを削除できます。

次に、ALTER TABLE ... ADD CONSTRAINT ... USING INDEXを使用して、一意のインデックスを主キー制約に変換します。

これで、外部キー制約を再作成できます。

3
Laurenz Albe