PostgreSQLでテーブル構造を新しいテーブルにコピーする方法
PostgreSQLでテーブル構造を新しいテーブルにコピーする方法
CREATE TABLE AS を使う
これは、新しいテーブルを作成し、元のテーブルの構造をコピーする最も簡単な方法です。
CREATE TABLE new_table AS
SELECT * FROM old_table;
このコマンドは、元のテーブルのすべての列とデータ型を新しいテーブルにコピーします。
INSERT INTO
を使って、元のテーブルから新しいテーブルにデータを挿入することもできます。
INSERT INTO new_table (column1, column2, ...)
SELECT column1, column2, ...
FROM old_table;
pg_dump
と psql
を使って、元のテーブルの構造とデータをダンプし、新しいテーブルに復元することもできます。
pg_dump -t old_table > old_table.sql
psql -d database_name < old_table.sql
このコマンドは、元のテーブルの構造とデータを old_table.sql
ファイルにダンプし、それを database_name
データベースの新しいテーブルに復元します。
- 構造とデータをすべてコピーしたい場合は、
CREATE TABLE AS
を使うのが最も簡単です。 - 特定の列だけをコピーしたい場合は、
INSERT INTO
を使うのが良いでしょう。 - テーブルの構造とデータを別のデータベースにコピーしたい場合は、
pg_dump
とpsql
を使うのが良いでしょう。
その他の注意事項
- 新しいテーブルの名前は、元のテーブルと異なる必要があります。
- 新しいテーブルが作成される前に、必要な権限を持っていることを確認してください。
CREATE TABLE AS
を使う場合は、元のテーブルに主キーがある場合は、新しいテーブルにも主キーが作成されます。
CREATE TABLE AS を使う
-- テーブル構造とデータをすべてコピー
CREATE TABLE new_table AS
SELECT * FROM old_table;
-- 特定の列だけをコピー
CREATE TABLE new_table (column1, column2) AS
SELECT column1, column2
FROM old_table;
INSERT INTO を使う
-- テーブル構造とデータをすべてコピー
INSERT INTO new_table
SELECT * FROM old_table;
-- 特定の列だけをコピー
INSERT INTO new_table (column1, column2)
SELECT column1, column2
FROM old_table;
pg_dump と psql を使う
-- テーブル構造とデータをダンプ
pg_dump -t old_table > old_table.sql
-- 別のデータベースに復元
psql -d database_name < old_table.sql
注意事項
- 上記のコードは、PostgreSQL 10.0 以降で使用できます。
PostgreSQLでテーブル構造を新しいテーブルにコピーするその他の方法
pg_catalog.pg_table_def
ビューを使って、元のテーブルの構造を新しいテーブルの定義文を取得できます。
SELECT
schemaname,
tablename,
attname,
typname,
coldefault,
is_nullable
FROM pg_catalog.pg_table_def
WHERE tablename = 'old_table';
このクエリ結果は、CREATE TABLE
ステートメントで使用できます。
CREATE TABLE new_table (
schemaname.tablename,
attname typname,
...
)
WITH (
OIDS = FALSE
);
外部ツールを使う
テーブル構造をコピーするための外部ツールもいくつかあります。
- SQL Workbench/J: https://www.sql-workbench.j/
これらのツールは、GUI を使ってテーブル構造を簡単にコピーできます。
- 特定の列だけをコピーしたい場合や、複雑な条件でコピーしたい場合は、
pg_catalog.pg_table_def
を使うのが良いでしょう。 - GUI を使ってテーブル構造をコピーしたい場合は、外部ツールを使うのがおすすめです。
sql postgresql