スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

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

カレンダー
04 | 2017/05 | 06
- 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 31 - - -
ブログ内検索

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

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

天気予報
QRコード
QR
RSSリンクの表示
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。