web-dev-qa-db-ja.com

PostgreSQLで既存のインデックスを主キーに昇格する方法

テーブル内で主キーを作成する方法を知っていますが、既存のインデックスを主キーにする方法を教えてください。既存のテーブルをデータベース間でコピーしようとしています。テーブルを表示すると、下部のインデックスは次の形式です。

"my_index" PRIMARY KEY, btree (column1, column2)

私はインデックスを作成しました:

CREATE INDEX my_index ON my_table (column1, column2)

しかし、それを主キーにする方法がわかりません...

更新:サーバーのバージョンは8.3.3です

13
WildBill

ALTER TABLEを使用して、主キーconstraintを追加します。 Postgresでは、「 ALTER TABLE .. ADD table_constraint_using_index "フォーム

もちろん、インデックスは主キーに対して一意である必要があります

ALTER TABLE my_table 
    ADD CONSTRAINT PK_my_table PRIMARY KEY USING INDEX my_index;
16
gbn

そのバージョンのpostgresqlでは、インデックスを主キーに変換することは不可能だと思います。

既存のインデックスを削除し、指定した列を使用して主キーを作成します。

DROP INDEX my_index;
ALTER TABLE ONLY my_table ADD CONSTRAINT pk_my_table PRIMARY KEY(column1,column2);

7.4と8.4で働いた

7
Craig Efrein