PostgreSQL DBのコピー、TABLEのコピー
データベース、テーブルを複製
データベースの複製
SQL
--複製
createdb -E UTF8 -U postgres -T foodb bardb
コピー元
foodb=# \l
データベース一覧
名前 | 所有者 | エンコーディング | 照合順序 | Ctype(変換演算子) | アクセス権限
--------+----------+------------------+--------------------+--------------------+------------
foodb | postgres | UTF8 | Japanese_Japan.932 | Japanese_Japan.932 |
foodb=# \d
リレーションの一覧
スキーマ | 名前 | 型 | 所有者
----------+---------+------------+----------
public | foo | テーブル | postgres
public | foo_seq | シーケンス | postgres
createdb(コピー)後
bardb=# \l
データベース一覧
名前 | 所有者 | エンコーディング | 照合順序 | Ctype(変換演算子) | アクセス権限
--------+----------+------------------+--------------------+--------------------+------------
foodb | postgres | UTF8 | Japanese_Japan.932 | Japanese_Japan.932 |
bardb | postgres | UTF8 | Japanese_Japan.932 | Japanese_Japan.932 |
bardb=# \d
リレーションの一覧
スキーマ | 名前 | 型 | 所有者
----------+---------+------------+----------
public | foo | テーブル | postgres
public | foo_seq | シーケンス | postgres
テーブルの複製
SQL
--単純な複製
CREATE TABLE bar AS SELECT * FROM foo;
コピー元
pgdb=# \d foo
テーブル "public.foo"
列 | 型 | 照合順序 | Null 値を許容 | デフォルト
--------------+---------+----------+---------------+------------
foo_id | integer | | not null |
foo_name | text | | not null |
foo_category | integer | | |
foo_flg | boolean | | |
pgdb=# SELECT * FROM foo;
foo_id | foo_name | foo_category | foo_flg
--------+----------+--------------+---------
100001 | リンゴ | 1 | t
100002 | バナナ | 1 | f
100003 | ネコ | 2 | t
100004 | イヌ | 2 | f
(4 行)
CREATE TABLE(コピー)後
pgdb=# \d bar
テーブル "public.bar"
列 | 型 | 照合順序 | Null 値を許容 | デフォルト
--------------+---------+----------+---------------+------------
foo_id | integer | | |
foo_name | text | | |
foo_category | integer | | |
foo_flg | boolean | | |
pgdb=# SELECT * FROM bar;
foo_id | foo_name | foo_category | foo_flg
--------+----------+--------------+---------
100001 | リンゴ | 1 | t
100002 | バナナ | 1 | f
100003 | ネコ | 2 | t
100004 | イヌ | 2 | f
(4 行)
SQL
--カラムを絞り込んで複製
CREATE TABLE bar AS SELECT foo_id,foo_name FROM foo;
CREATE TABLE(コピー)後
pgdb=# \d bar
テーブル "public.bar"
列 | 型 | 照合順序 | Null 値を許容 | デフォルト
----------+---------+----------+---------------+------------
foo_id | integer | | |
foo_name | text | | |
pgdb=# SELECT * FROM bar;
foo_id | foo_name
--------+----------
100001 | リンゴ
100002 | バナナ
100003 | ネコ
100004 | イヌ
(4 行)
SQL
--空テーブルを複製
CREATE TABLE bar AS SELECT * FROM foo WHERE foo_category = 99;
SELECT結果が0件になる条件を指定する。
CREATE TABLE(コピー)後
pgdb=# \d bar
テーブル "public.bar"
列 | 型 | 照合順序 | Null 値を許容 | デフォルト
--------------+---------+----------+---------------+------------
foo_id | integer | | |
foo_name | text | | |
foo_category | integer | | |
foo_flg | boolean | | |
pgdb=# SELECT * FROM bar;
foo_id | foo_name | foo_category | foo_flg
--------+----------+--------------+---------
(0 行)