スポンサーサイト

上記の広告は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

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

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

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

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