テーブルRENAMEからのテーブル新規作成で、テーブル再作成
元テーブルは一時的にバックアップを取っておき、
新テーブルはCREATE TABLEで作成する際の手順
①変更するテーブルの、PK名・外部キー名(自分が親テーブル、子テーブルどちらも)・INDEX名を漏れ無く調べる。
②テーブル名の変更
ALTER TABLE TABLE_NAME RENAME TO TABLE_NAME_BK;
③PK名の変更
ALTER TABLE TABLE_NAME_BK RENAME CONSTRAINT PK名 TO PK名_BK;
④外部キー名の変更
(自分が子テーブルとして他テーブルを参照している外部キー)
ALTER TABLE TABLE_NAME_BK RENAME CONSTRAINT FK名 TO FK名_BK;
⑤外部キーの削除
(自分が親テーブルとして他テーブルから参照されている外部キー)
ALTER TABLE REF_TABLE_NAME DROP CONSTRAINT FK名;
⑤INDEX名の変更
(名前付きPKを作成していた場合は、自動で名前付きINDEXが作成されているため、それも変更する)
ALTER INDEX INDEX名 RENAME TO INDEX名_BK;
⑥新定義テーブルの作成
CREATE TABLE TABLE_NAME(
~
CONSTRAINT PK名 PRIMARY KEY(COLUMN)
);
⑦外部キーの作成
(自分が親テーブルと子テーブルのどちらも作成)
ALTER TABLE TABLE_NAME ADD CONSTRAINT FKXXX
FOREIGN KEY (COLUMN) REFERENCES REF_TABLE_NAME(COLUMN);
⑧INDEXの作成
CREATE INDEX INDEX ON TABLE_NAME (COLUMN);
⑨旧テーブルから新テーブルへのデータ移行
(テーブル定義変更内容に合わせてデータを加工する)
INSERT INTO TABLE_NAME SELECT * FROM TABLE_NAME_BK;
COMMIT;