PostgreSQL テーブルのコピー

既存テーブルを基に新しいテーブルを作成する場合、
CREATE TABLE B AS SELECT * FROM A WHERE <条件>;

→全レコードをコピーしたい場合はWHERE句を省略
のようなSQLを利用することになると思いますが、PostgreSQLで以下のようにテーブルをコピーできないか?
という問い合わせが来ました。

・同じDB内に別名のテーブルとしてコピーする。
・テーブルの中身はコピーしない。
・制約/インデックスもコピーする。

現状、pg_dumpでテーブル定義をテキストでダンプし、そのテキストのテーブル名を別名に変えてリストア、という方法で実現しているようなのですが、より簡単にテーブルをコピーできないものだろうか…、という相談でした。

ちょいと調べてみたところ、CREATE TABLE文でLIKE句を使えば上手くいくことが分かり、その内容を伝えて無事に解決しました。
CREATE TABLE B (LIKE A INCLUDING DEFAULTS INCLUDING CONSTRAINTS INCLUDING INDEXES);

※INCLUDING句は、バージョンによって差異があります。
※バージョン8.3の環境で確認したところ、外部キー制約はコピーされませんでした。
CREATE TABLE(PostgreSQL 9.3.2)
関連記事
スポンサーサイト



この記事へのコメント

プロフィール

あんま覚えてへんわ


「あんま覚えてへんわ」です。

最新記事
最新コメント
月別アーカイブ
カテゴリ

openclose

カレンダー
08 | 2019/09 | 10
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 - - - - -
ブログ内検索

アクセス数
アクセスランキング
[ジャンルランキング]
日記
5470位
アクセスランキングを見る>>

[サブジャンルランキング]
会社員・OL
1005位
アクセスランキングを見る>>

天気予報
QRコード
QR
RSSリンクの表示