PostgreSQLを使っていると、テスト環境を用意したり、データをバックアップしたりする目的でテーブルを簡単に複製したいということがあります。そこで今回は、PostgreSQLでテーブルを効率よく複製(コピー)する方法を、具体的な例を交えてご紹介します。
PostgreSQLでテーブルを複製する利点
PostgreSQLには、SQL標準の構文で簡単にテーブルをコピーできるCREATE TABLE AS
文があります。この方法の大きなメリットは、元テーブルのデータを一括で新しいテーブルに複製できることです。ただし、注意点として、元のテーブルに存在するインデックスや制約、トリガーはコピーされません。
基本的なテーブル複製の方法
CREATE TABLE AS
文を使ったテーブル複製の基本的な構文は以下のようになります。
CREATE TABLE 新しいテーブル名 AS
SELECT * FROM 元のテーブル名;
このコマンドを実行すると、新しいテーブルが元テーブルと同じ列構成・データ型で作成され、全てのデータがコピーされます。
条件をつけてテーブルの一部データをコピーする
特定の条件に当てはまるデータのみをコピーする場合は、WHERE
句を使って条件を指定します。
CREATE TABLE 新しいテーブル名 AS
SELECT * FROM 元のテーブル名 WHERE 条件;
また、データをコピーせずにテーブルの構造だけを複製したい場合は、以下のように常に偽となる条件を指定すると便利です。
CREATE TABLE 新しいテーブル名 AS
SELECT * FROM 元のテーブル名 WHERE false;
新しい列を追加してデータをコピーする
データの複製と同時に新しい列を追加することも可能です。
CREATE TABLE 新しいテーブル名 AS
SELECT *, '新しい値' AS 新しい列名 FROM 元のテーブル名;
上記の場合、新しいテーブルの全レコードに対して新しい列が追加され、その列には指定した値が設定されます。
実践:実際にテーブルを作成・複製する
実際にテーブルを作成して、複製をしてみましょう。
- 元テーブルの作成:
CREATE TABLE users (
user_id VARCHAR(10) PRIMARY KEY,
user_name VARCHAR(100) NOT NULL,
created_at TIMESTAMP NOT NULL,
updated_at TIMESTAMP
);
- データを投入:
INSERT INTO users VALUES
('001', '田中太郎', NOW(), NULL),
('002', '佐藤花子', NOW(), NULL);
- テーブルの複製:
CREATE TABLE users_backup AS
SELECT * FROM users;
これだけで、users
テーブルのデータをそのままusers_backup
という新しいテーブルに複製できます。
まとめ
PostgreSQLでは、CREATE TABLE AS
文を利用することで、簡単にテーブルの複製が行えます。データのバックアップやテスト用テーブルを迅速に準備できるため、ぜひ日々の運用に取り入れて効率化を図ってみてください。ただし、この方法では制約やインデックスは複製されないため、必要に応じて後から追加作業を行うことも忘れないようにしましょう。
0 件のコメント:
コメントを投稿