目的: 既にデータの入った列を別のテーブルに移動させる
プログラムの変更に伴って、ある列を別のテーブルに移動させたくなった。
検索するとデータベースまるごとの移行とかの
情報が多くて調べにくかったので、簡単だけどメモ。
前提条件
- WalletテーブルからBankテーブルにmonney列を移動する
- ただし、2つのテーブルで同じidをもったものだけを移動すれば良い
(親テーブル<-->従属テーブルのような移動を想定している)
初期状態
-- 初期テーブル定義
CREATE TABLE Wallet (
id INTEGER NOT NULL,
monney INTEGER NOT NULL,
CONSTRAINT wallet_pkey PRIMARY KEY (id)
);
CREATE TABLE Bank (
id INTEGER NOT NULL,
CONSTRAINT bank_pkey PRIMARY KEY (id)
);
-- 適当にデータが入っているものとする
INSERT INTO Wallet
(id, monney)
VALUES
(1, 100),
(2, 500),
(3, -1000),
(4, 10000),
(5, 0);
INSERT INTO Bank
(id)
VALUES
(1), (3), (4), (5);
移動の実行
-- Monney列をBankテーブルに作成
ALTER TABLE Bank
ADD COLUMN monney integer;
-- WalletテーブルからBankテーブルにmonneyの内容をコピー
UPDATE Bank
SET monney =
(SELECT monney
FROM Wallet
WHERE Wallet.id = Bank.id
);
-- 動作を確認したら、必要に応じて元のテーブルからmonney列削除
ALTER TABLE Wallet
drop monney;
以上。